文字コードの学習1


文字コードのバイナリ確認

1byte文字と2byte文字の切り替えなどがあるので、「a1」を例に各文字コードのバイナリを調べてみる。
■使用エディタ:サクラエディタ Ver.2.2.0.1、UTF32用にMIFES10

文字 Unicode UTF-16 UTF-32 Shift JIS JIS213 EUC-JP
a U+0061 0x0061 0x61000000 0x61 1-3-65 0x61
U+3042 0x3042 0x42300000 0x82A0 1-4-2 0xA4A2
1 U+0031 0x0031 0x31000000 0x31 1-3-17 0x31
U+FF71 0xFF71 0x71FF0000 0xB1 - 0x8EB1
文字コード バイナリ バイト数
JIS 61 - 1B-24-42 - 24-22 - 1B-28-42 - 31 - 1B-28-49 - 31 - 1B-28-42 17
SJIS 61 - 82-A0 - 31 - B1 5
EUC_JP 61 - A4-A2 - 31 - 8E - B1 6
UTF-8 61 - E3-81-82 - 31 - EF-BD-B1 8
UTF-16 FF-FE - 61-00 - 42-30 - 31-00 - 71-FF 10
UTF-32 61-00-00-00 - 42-30-00-00 - 31-00-00-00 - 71-FF-00-00 16

文字集合

代表的なものとして「JIS X 0208」と「UNICODE」がある。「JIS X 0208」は「区(行)」と「点(列)」で文字の位置を判別する。

JISコード(ISO-2022-JP)

コード:[ESC]:0x1B(27)、$:0x24(36)、(:0x28(40)、B:0x42(66)、I:0x49(73)
漢字の始まり:ESC$B
ASCIIの始まり:ESC(B
半角カタカナの始まり:ESC(I
半角カナの「ア」は31でASCIIの領域とぶつかるのでエスケープシーケンスを使用しているが、その他の方法もあるよう。

EUC-JP

半角カナは前に0x8Eをおいた2byte表現となる。
補助漢字は0x8Fをおいた3byte表現となる。(例:繫U+7E4B)

UTF-8

ASCIIと互換性を持たせるためにASCIIと同じ部分は1yte。
「あ」はU+3042で2進表記にする。
数値の3042だと0000 1011 1110 0010となるが、
文字の3042として0011 0000 0100 0010とする、
1110yyyy 10yxxxxx 10xxxxxx
11100011 10000001 10000010(0xE38182)
https://ja.wikipedia.org/wiki/UTF-8
ひらがなの「あ」は3byteと、1文字を表すbyte長は1~4byteと可変となる。ただし、4byteのUTF-8が扱えないシステムもある。
JIS X 0213の第3・第4水準漢字の一部が4byteで表される。(例「𠈓」人偏に両。U+20213。0xF0A08893)

UTF-16(Unicode)

Windowsのメモ帳やサクラエディタではUnicodeとして表記されている。
先頭にBOM(ByteOrderMark)の2byteが付与される。
0xFFFE:リトルエンディアン
0xFEFF:ビッグエンディアン
1文字を表すbyte長は2byte固定だが、1文字を表すのに4byteを使用するサロゲートペアがある。
(例「𠈓」人偏に両。U+20213。0x40D813DE)

参考URL

文字コード表:http://charset.7jp.net/jis.html
半角カナ:http://mikeneko.creator.club.ne.jp/~lab/kcode/hankana.html

文字化け

「あ」が化ける場合の想定
SJIS:0x82A0
EUC:0xA4A2
UTF16:0x4230