プログラマのための文字コード技術入門 第4章「代表的な文字符号化方式」その2
- Unicode の符号化方式
- 元はシンプルに区点番号を並べた UCS-2, UCS-4
- UTF-16
- UTF-32
- UTF-8
- 1つの符号位置は1バイトから6バイト(現実的には4バイト)で表現される
- ASCII 互換(ASCII の範囲(7ビット)の文字は1バイトで表現される)
- 先頭の1バイトの上位ビットをみて何バイトで表現されているかわかる。符号位置に応じて異なるビット位置で分割して埋め込まれる
- それだけでなくどのバイト位置も上位ビットをみると文字の途中なのか先頭なのかわかるので文字の区切りを判別できる。賢い!
- UTF-8 には同じ符号位置を異なるバイト数で符号する(上位の0を無視しない)ことができてしまうので、文字種チェックなどをすりぬけてセキュリティ上の問題になることがある。現在は可能な限り短い符号化をしないといけないことになっている
- CESU-8 と Modified UTF-8 なんかこういうのもある
ついに UTF-8 の符号化を学びました。BOM とかサロゲートペアといった「聞いたことがあるんだけど実は何なのかよく知らない」言葉の意味がわかってとてもすっきりしました。