xxd コマンドを知ったので冗長な UTF-8 表現を作ってみる修行

今までずっと od しか使っていなかったけれど、hexdump や xxd なんていうダンプコマンドがあることを知った。xxd は逆変換もできるらしいので、UTF-8 の冗長な表現を作ってみることにした。原理は知っていたけれど、実際にやってみたことがなかったから。

「?」を冗長表現してみる。

?
3f
0011 1111

だから、

1100 0000 1011 1111
c0 bf
1110 0000 1000 0000 1011 1111
e0 80 bf
1111 0000 1000 0000 1000 0000 1011 1111
f0 80 80 bf

ということで、

]$ echo -n 3f 2d c0bf 2d e080bf 2d f08080bf 0a | xxd -r -p
?-?-?-?

おお。

xxd の逆変換は使えるなあ。でも、変換はこれからも od を使っちゃうんだろうな。

追記

まだ先があったよねえ。

1111 1000 1000 0000 1000 0000 1000 0000 1011 1111
f8808080bf
1111 1100 1000 0000 1000 0000 1000 0000 1000 0000 1011 1111
fc80808080bf
$ echo -n 3f 2d c0bf 2d e080bf 2d f08080bf 2d f8808080bf 2d fc80808080bf 0a | xxd -r -p
?-?-?-?-?-^@^@^@$

おおお、6 bytes のは駄目だった。これは面白い。

ちなみに、当たり前かもしれないけれど、

$ echo -n c0bf | xxd -r -p | od -An -tx1
 c0 bf

であって、3f じゃないよ、ってことで。