コンピュータ上で文字を使うために、各文字に数値が割り当てられていますが、これを文字コードといいます。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コマンドを見てみると、たくさんの日本人がクレジットされていて、なんだか嬉しいです。
コメント