文字列の文字コードを手軽に確認

コンピュータ上で文字を使うために、各文字に数値が割り当てられていますが、これを文字コードといいます。ASCII、Shift_JIS、EUC、UTF-8などがそうです。
例えば、ASCIIなら、アルファベットのAが65(16進数で41)、HELLOという文字列は、72 69 76 76 79(16進数で 48 45 4C 4C 4F)となります。

コマンドライン上で確認してみましょう。

~$ echo -n HELLO | od -td1
0000000   72   69   76   76   79   10
0000006
~$ 

odはOctal Dumpの略で、データのダンプを行うコマンドです。
上記例では、HELLOという文字列の文字コードを表示したことになります。

odは、Octal Dumpというぐらいですから、デフォルトでは8進数ダンプを行うためのコマンドです。オプションを指定しないと8進数表示となります。

~$ echo -n HELLO | od
0000000 042510 046114 000117
0000005
~$ 

odに-tオプションを指定すると、ダンプの書式が設定できます。

-to[サイズ] 8進数
-td[サイズ] 10進数
-tx[サイズ] 16進数
-ta ASCII

16進数で2BYTE毎の表示をするには-tx2と指定します。

~$ echo -n HELLO | od -tx2
0000000 4548 4c4c 004f
0000005
~$ 

では日本語の文字コードについて確認してみましょう。
LinuxではデフォルトはUTF-8となっていますが、確かめてみます。nkf –guessコマンドで文字コードが確認できます。

~$ echo -n 日本語 | nkf --guess
UTF-8
~$ 

16進ダンプの結果です。日がe6 97 a5、本がe6 9c ac、語がe8 aa 9e、それぞれの文字は3Byteで構成されています。

~$ echo -n 日本語 | od -tx1
0000000 e6 97 a5 e6 9c ac e8 aa 9e
0000011
~$ 

さて、文字列「日本語」に対して、Shift_JISやEUCの文字コードがどうなっているか知りたくなってきました。
このような場合も、コマンドラインでパイプ渡しするだけです。nkfでフィルタします。

~$ echo -n 日本語 | nkf -s | nkf --guess
Shift_JIS
~$ echo -n 日本語 | nkf -s | od -tx1
0000000 93 fa 96 7b 8c ea
0000006
~$ 
~$ echo -n 日本語 | nkf -e | nkf --guess
EUC-JP
~$ echo -n 日本語 | nkf -e | od -tx1
0000000 c6 fc cb dc b8 ec
0000006
~$ 

nkf -s はShift_JISへの変換、nkf -eはEUC-JPへの変換をしてくれます。
このnkfコマンドは、文字コードの変換をしてくれるコマンドですが、ひらがな⇔カタカナ変換や、全角カナ⇔半角変換等できる優れたコマンドです。manコマンドを見てみると、たくさんの日本人がクレジットされていて、なんだか嬉しいです。

コメント

タイトルとURLをコピーしました