元号が決まったからバイナリエディタで令和を書く

本日 平成31年4月1日 平成に次ぐ元号として令和に決まったと発表された。

新しい言葉、今までに馴染みがないこの言葉だが、これから数十年お世話になるので、出会いの記念に令和という字をバイナリエディタで書いてみよう

Shift-JIS と EUC-JPは速攻クリア

まず令と和という字についてどんなコードか調べてみよう

https://ja.wiktionary.org/wiki/%E4%BB%A4

https://ja.wiktionary.org/wiki/%E4%BB%A4

速攻SJISのコードが書いてある。
令は0x97DF 和は0x9861

それを単純にバイナリエディタに書くだけでOK。

検証のためにxxdコマンドを使うことにした。
16進数表記の文字列をxxdコマンドを通すとバイナリに変わる。
しかし、SJISのコードは自分の環境では表示できないので、最終的にiconvでutf-8に変換することする

echo “97df9861” | xxd -p -r | iconv -f SJIS -t UTF-8

実行結果

EUC-JPも同じ感じで、対応するコードを探すだけで行ける。
ただウィクショナリーには書いてなかったので、EUC-JPコード表から探す。

http://charset.7jp.net/euc.html

令は0xCEE1 和は0xCFC2というのですぐに見つかる。

検証用のコマンドはこちら

echo “cee1cfc2” | xxd -p -r | iconv -f EUC-JP -t UTF-8

実行結果

ちょっとめんどくさいUTF-8

前半の2つは、ただコードを調べるだけだが、UTF-8はUnicodeとの関係を理解しないと難しい

Unicodeのコードは別にあるが、それがイコールUTF-8ではない。
UFT-8とはUnicodeを符号化したものになる

https://ja.wikipedia.org/wiki/UTF-8

まず、令はU+4EE4
和はU+548C
というUnicodeのコードが与えられている。

この2つの文字はU+0800 から U+FFFFの間なので、
3バイト文字になる

令の字を分解 して説明

U+4EE4を2進数に変えると、0100 111011 100100になる。
4桁 6桁 6桁に分ける。
分けたらそれぞれを、16進数にする。

0x04 0x3B 0x24

それぞれを決められた数足す。最初は0xE0 残りの2つは0x80が決められた数字
0x04 + 0xE0 = 0xE4
0x3B + 0x80 = 0xBB
0x24 + 0x80 = 0xA4

※2バイト文字や4バイト文字ではそれぞれ足す数が違うと思うが、UTF-8の表をみてそれぞれの差分を調べれば何を足せばいいかがわかる

和の字も同じようにして 計算をする

最終的な成果

というわけで令の時は0xE4BBA4
和の字は0xE5928C
それぞれ3バイトを使う文字だ。

echo “e4bba4e5928c” | xxd -p -r

無事にUTF-8も16進数を手で打ち込んで令和を作ることができた。

さて、平成最後のユートピアを一ヶ月楽しもう

スポンサードリンク

関連コンテンツ