符号化文字集合
● ASCII
○ 128の符号位置があって 7bit で表せる
● JIS X 0201
○ ラテン文字集合(ASCIIと2文字違う)と片仮名の 1バイト文字集合
● JIS X 0208
○ 日本で使われる漢字・平仮名・片仮名等を収録した 2バイト文字集合
○ 漢字は第1水準と第2水準の物が含まれる
● JIS X 0212
○ 補助漢字、JIS X 0208 と組み合わせて用いる
● JIS X 0213
○ JIS X 0208 に足りない文字を補完するために開発された
● Unicode
○ 世界中の文字を収めることを目標にした符号化文字集合
Slide 15
Slide 15 text
符号化方式
● EUC-JP
○ ASCII と JIS X 0208 を同時に用いる 8ビットの符号化方式
○ ASCII は 1バイト、JIS X 0208 は 2バイトで表現される
○ 制御文字 SS2 と SS3 を使って JIS X 0201 片仮名集合と JIS X 0212 も扱える
● Shift_JIS
○ JIS X 0201 に JIS X 0208 を変形のうえ押し込んだもの
○ JIS X 0201 は 1バイト、JIS X 0208 は 2バイトで表現される
● UTF-8
○ Unicode の符号化方式、1文字で 1バイト〜 4バイトまでの長さをとり得る
○ 符号位置とバイト列の対応
■ 00000000 〜 0000007F => 0xxxxxxx
■ 00000080 〜 000007FF => 110xxxxx 10xxxxxx
■ 00000800 〜 0000FFFF => 1110xxxx 10xxxxxx 10xxxxxx
■ 00010000 〜 0010FFFF => 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
Slide 16
Slide 16 text
● https://ja.wikipedia.org/wiki/JIS_X_0213
○ > 平仮名 - 半濁点付きのか行(鼻濁音)、「ヴ」「ヵ」「ヶ」に対応する平仮名
つまり「ゔ」は JIS X 0208 (EUC-JP) には含まれていない文字!
JIS X 0213 で追加された文字の概略
Slide 17
Slide 17 text
nkfのソースコードリーディングをしてみる (リベンジ)
● w2e_conv => unicode_to_jis_common という流れ
○ EUC-JP は JIS X 0208 を単純に含むもの
○ なので JIS (= JIS X 0208) への変換という解釈ができた
● UTF-8 から EUC-JP への変換は変換テーブルを使う
○ utf8_to_euc_E382 に行き着いた
○ https://github.com/ruby/nkf/blob/24e6ae66395a14d3022e1dd1210d04168e2c8d9e/ext/nkf/nkf-
utf8/utf8tbl.c#L4370-L4379
○ たしかに「ヴ」「ヵ」「ヶ」に対応する平仮名箇所のテーブルが歯抜けになっている
○ SCORE_NO_EXIST となる機序は確認できた