2月 10 2009
FreeBSD の od の -c オプションは日本語が表示できる
Linux だと od の -c オプションで ASCII 文字が表示されるわけですが、日本語は表示できません。こんな感じ。
$ echo $LANG
ja_JP.UTF-8
$ touch 日本語.txt
$ ls
日本語.txt
$ ls | od -xc
0000000 97e6 e6a5 ac9c aae8 2e9e 7874 0a74
346 227 245 346 234 254 350 252 236 . t x t \n
0000016
しかし FreeBSD の od で同じことをやると、Locale に従って日本語で表示されるではありませんか。
$ echo $LANG
ja_JP.UTF-8
$ touch 日本語.txt
$ ls
日本語.txt
$ ls | od -xc
0000000 97e6 e6a5 ac9c aae8 2e9e 7874 0a74
日 ** ** 本 ** ** 語 ** ** . t x t \n
0000016
$ export LANG=ja_JP.eucJP
$ ls * | nkf -We | od -xc
0000000 fcc6 dccb ecb8 742e 7478 000a
日 ** 本 ** 語 ** . t x t \n
FreeBSD の方の man odを見ると、-c はこうなってる。
デフォルトの文字集合での文字。 表示できない文字は 3 桁の 8 進数文字コードで表現されます。ただし、次の文字は C エスケープで表現されます: (略)
「ASCII」 じゃなくて 「デフォルトの文字集合」 ってのがミソですね。man を見る限り FreeBSD 4.7 からそうなってたのかしらん。知らなかった…。ちなみに hexdump の -c オプションは「ASCII」だそうな。Linux の man od も「ASCII」と。
Linux みたいな挙動しか期待してなかったので、ちょっと嬉しくてエントリ化。
ちなみにググる限り Solaris とかもそうっぽい。他の *BSD とかも含め手元に環境がないからわからん。
