unicode.orgで見つけた文字をUTF-8に変換する方法

タイトルそのままなんですが、まずは私のターミナルを見てください。

ターミナルにU+2620を表示してみたところ

ドクロマークのようなものが表示されています。日頃の行いが悪すぎてターミナルが呪われたようですね!というのは冗談で、unicodeの文字(U+2620)を1文字表示してみたところです。

私の環境はMacOSXとzshですが、zshでは”\xe2″などで任意の1バイトを表現することができます。つまり、IMEから入力できない文字でも、UTF-8表現の3バイトを指定することで任意の文字を表示できます。

unicodeには色々な文字があります。今回はunicode.orgのMiscellaneous Symbolsを見て、U+2620というのが面白い文字だな、ということで見つけてきました。

U+2620などというのはユニコードの文字を表現するための記法です。細かい説明を端折ると、「26 20」という2バイトが、この文字のUTF-16(ただしビッグエンディアン)でのバイト表現になります。

UTF-16でのバイト表現がわかれば、あとはUTF-8のバイト表現に直すだけです。方法は何通りかあります。まず、nkfを使う方法が考えられます。(上で紹介したzshの機能を利用しています)

$ echo "\x26\x20" | nkf -W16B -w | od -tx1
0000000    e2  98  a0
0000003

また、PHPのmb_convert_encoding関数を使っても変換が可能です。

$ php -r 'var_dump(bin2hex(mb_convert_encoding("\x26\x20", "UTF-8", "UTF-16BE")));'
string(6) "e298a0"

RubyやPerlを使っても同様にできるはずです。このようにして、UTF-16の2バイトからUTF-8の3バイトを得ることができます。

unicode.orgのCode Charts for Symbols and Punctuationなんかを見ていると怪しい文字がたくさんあります。それらの文字が自由に使えると思うとワクワクするのは私だけでしょうか。

コメント / トラックバックはありません

コメントする