プログラムで UTF-8 を扱う際に気づいたことなど。メモ。
Unicode は、世界で使われる全ての文字を共通の符号化文字集合にて利用できるようにしようという考えで作られた文字集合である。元々16ビットの文字集合で全ての文字の網羅を目指して開発されたが、コードポイントが圧倒的に足りず、現在では21ビットの文字集合として規定されている。
Unicode の文字を表現する場合、"U+" にその文字のコードポイントを表す16進数を続けた文字列を使って表す。たとえば、"A" という文字は Unicode ではコードポイント 41 にあり、"U+0041" となる。
実際にコンピュータで Unicode を扱う際は符号化を行う。その符号化方式の 1 つが UTF-8 である。
8 bit 単位の可変長コード(1-4 byte)にエンコードする方式。ASCII に対して上位互換となっており、文字の境界が明確であるため使いやすい。
UTF-8 は Unicode の U+0000 から U+1FFFFF までを、1-4 byte で表現する。
以下の表にしたがって、Unicode を UTF-8 に符号化することが出来る。
Unicode | UTF-8 に変換したときのビットパターン | ||||
---|---|---|---|---|---|
コードポイント | ビットパターン | 1 バイト目 | 2 バイト目 | 3 バイト目 | 4 バイト目 |
U+0000 - U+007F | 00000000, 0xxxxxxx | 0xxxxxxx | |||
U+0080 - U+07FF | 00000xxx, xxyyyyyy | 110xxxxx | 10yyyyyy | ||
U+0800 - U+FFFF | xxxxyyyy, yyzzzzzz | 1110xxxx | 10yyyyyy | 10zzzzzz | |
U+10000 - U+1FFFFF | 000wwwxx, xxxxyyyy, yyzzzzzzz | 11110www | 10xxxxxx | 10yyyyyy | 10zzzzzz |