うまいぼうぶろぐ

linuxとhttpdとperlのメモ

unicode の 16進数表示


"あ" を E3 81 82 に変換する。

文字コードは全部utf8で。

echo と xxd 使う

xxdじゃなくてhexdump、od -t x1 とかでもいい。

$ echo -n あ | xxd -g1
0000000: e3 81 82                                         ...


perl の pack 関数使う

$ perl -e 'print unpack "H*", "あ"'   
e38182

perl正規表現で1バイトごと取り出してord で1文字ずつ文字コード取り出す

$ perl -e '$text = shift; printf "%x ", ord($_) for $text =~ m/([\x00-\xff])/g ' あ
e3 81 82

16進数から文字に戻す

やりかたいっぱいあるけど。

unpack すれば16進数から元の文字に戻せる

packの反対

$ perl -e 'print pack "H*", "e38182"' 
あ

chr でくっつける

ordの反対

$ perl -le '$char =  chr(hex("e3")) . chr(hex("81"))  . chr(hex("82")) ; print $char '
あ