1
0

More than 1 year has passed since last update.

Unicode: バイト列を U+4E03 〜 U+8E0F を使ってエンコードする

Last updated at Posted at 2023-06-28

符号化形式

名前がないと不便なので Kanji14 形式とします。

情報文字: U+4E10 〜 U+8E0F

ネットワーク バイト順のバイト列データを 14ビット区切りにし、Unicode の範囲 U+4E10 〜 U+8E0F に割り当てた文字列に変換します。

バイト列の14ビット区切り形式
  +--------+--------+--------+---------+--------+--------+--------+----
D |   +0   |   +1   |   +2   |    +3   |   +4   |   +5   |   +6   | ...
  +--------+----+-+-+--------+----+----+--------+-+-+----+--------+----
B |  0..7  |0..5|6|7|  0..7  |0..3|4..7|  0..7  |0|1|2..7|  0..7  | ...
  +--------+----+-+-+--------+----+----+--------+-+-+----+--------+----
E |     [0]     |       [1]       |       [2]       |     [3]     | ...
  +-------------+-----------------+-----------------+-------------+----

D: バイト列のデータ
B: バイト内のビット位置
E: 符号化に使用する 14 ビット区切り。これに 0x4E10 を加えた文字を使用する。

制御文字: U+4E03 〜 U+4E0F

符号化したデータは14ビット単位の情報なので、元のバイト列が7の倍数でないとき、最後の情報文字(U+4E10〜U+8E0F)では有効な情報が一部になります。

このとき、0x4E10 から有効なビット数(1〜13)を引いた U+4E03 〜 U+4E0F を制御文字として追加します。

見た目は小さくなるが…

バイナリをテキストに変換する例として Base 64 と比較してみます。

Base 64 Kanji14
21 バイト → 文字数 28 12 (半角24)
21 バイト → UTF-16 56 バイト 24 バイト
21 バイト → UTF-8 28 バイト 36 バイト
シフトJIS 変換 影響なし 不可

Kanji14 は表示すると短くなったように見えますが Base 64 の方が実用的です。

プログラム

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0