本日 平成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進数を手で打ち込んで令和を作ることができた。
さて、平成最後のユートピアを一ヶ月楽しもう