文字コード遊びメモ

| コメント(0) | トラックバック(0)

編集ミスの為修正中(修正した。)

文字コードを理解する為の手段としてテキストを色々いじって遊んでみた。

用意するもの

  • UNIXマシン(家ではFreeBSD 6.2)
  • iconv(GNU libiconv 1.11)
  • 適当なテキスト(コードは何でも良いがUTF-8で用意した。)
  • hd(大概UNIX機に入っている)

用意したテキストは以下の通り

% cat utf8text.txt




ようよう赤くなり行く山際。

枕草子の第一節であるが、最初の部分に改行をわざと入れ変化を分かり易くしてみた。

hdはmanの「-C]を参照。
アスキー部分は見にくい為削除。

UTF-8

% cat utf8text.txt| hexdump -C
00000000 e6 98 a5 0a e3 81 af 0a e6 9b 99 0a e3 80 82 0a
00000010 e3 82 88 e3 81 86 e3 82 88 e3 81 86 e8 b5 a4 e3
00000020 81 8f e3 81 aa e3 82 8a e8 a1 8c e3 81 8f e5 b1
00000030 b1 e9 9a 9b e3 80 82 0a
00000038

規則性により「0a」が改行コードであることがわかる。(LF)
一行目を見やすく並べなおしてみる。

「e6 98 a5」=「春」
「0a」 =「LF」
「e3 81 af」=「は」
「0a」 =「LF」
「e6 9b 99」=「曙」
「0a」 =「LF」
「e3 80 82」=「。」

3byteの文字と1byteの制御コードになっている事が見て取れる。

UCS-4

% iconv -f UTF-8 -t UCS-4 utf8text.txt| hexdump -C
00000000 00 00 66 25 00 00 00 0a 00 00 30 6f 00 00 00 0a
00000010 00 00 66 d9 00 00 00 0a 00 00 30 02 00 00 00 0a
00000020 00 00 30 88 00 00 30 46 00 00 30 88 00 00 30 46
00000030 00 00 8d 64 00 00 30 4f 00 00 30 6a 00 00 30 8a
00000040 00 00 88 4c 00 00 30 4f 00 00 5c 71 00 00 96 9b
00000050 00 00 30 02 00 00 00 0a
00000058

4byteの固定長であることがはっきり判る。
「00 00 66 25」=「春」
「00 00 00 0a」=「LF]
改行コードも4byteである。

UCS-4はUnihan Databaseで確認可能なので確認してみる。
結果を見ると「00 00 66 25」が「春」であることが分かる。
一緒にUTF-8も確認可能。

UTF-16

% iconv -f UTF-8 -t UTF-16 utf8text.txt | hd
00000000 fe ff 66 25 00 0a 30 6f 00 0a 66 d9 00 0a 30 02
00000010 00 0a 30 88 30 46 30 88 30 46 8d 64 30 4f 30 6a
00000020 30 8a 88 4c 30 4f 5c 71 96 9b 30 02 00 0a
0000002e

指定が無いのでBOM「fe ff」がついている。(feffなのでリトルエンディアン。Core 2 Duoだしね。)

eucJP

% iconv -f UTF-8 -t eucJP utf8text.txt | hd
00000000 bd d5 0a a4 cf 0a bd ec 0a a1 a3 0a a4 e8 a4 a6
00000010 a4 e8 a4 a6 c0 d6 a4 af a4 ca a4 ea b9 d4 a4 af
00000020 bb b3 ba dd a1 a3 0a
00000027

固定長(ただし、改行コードは1BYTE)

SJIS

% iconv -f UTF-8 -t SJIS utf8text.txt | hd
00000000 8f 74 0a 82 cd 0a 8f 8c 0a 81 42 0a 82 e6 82 a4
00000010 82 e6 82 a4 90 d4 82 ad 82 c8 82 e8 8d 73 82 ad
00000020 8e 52 8d db 81 42 0a
00000027

EUCと番地が違うだけという感じ。(SJISの方が元だし逆か。)

以上のように並べてみるだけでも結構面白いかも。

トラックバック(0)

トラックバックURL: http://www.intheforest.jp/mtadmin/mt-tb.cgi/13

コメントする

ウェブページ