iCalendar で知識が必要になったので、調べたことのメモ。
UCS Transformation Formats、ISO/IEC 10646 (Unicode) に基づいた文字エンコーディングの一つ。1オクテット8ビットで記述され、可変長の文字コードを持つ。UCS-4 までの文字を記述できる。
同系統のエンコーディングとして、他に、メール用に1オクテット7ビットのUTF-7、1オクテット16ビットの UTF-16、策定中の UTF-32 がある。
Windows などの Unicode で現在カバーしている文字は UCS-2 (U+0000-U+FFFF) レベルなので、UTF-8 で間に合う。
英語のような ASCII (0x00〜0x7F) 主体の言語圏にとっては、Unicode (UCS-2,4) に比べると今までの ASCII とほとんど同じ感覚で扱え、メモリ容量も節約できる。日本語のように変換必須の文字にとっては、またひとつ、面倒臭い変換処理が増えたことになる。メモリ上では、UCS-2 の一文字2バイトに対して UTF-8 では3バイトに増える場合が多いと思われる。
RFC や Unicode 仕様書で説明されている変換の対応関係を、自分なりにのみこめるように次図にまとめなおしてみた。
UCS | UTF-8 | |||||||
---|---|---|---|---|---|---|---|---|
Code Points | Scalar Value | 1st Byte | 2nd Byte | 3rd Byte | 4th Byte | 5th Byte | 6th Byte | |
UCS-2 | U+0000..U+007F | 0000 0000 0yyy xxxx | 00..7F 0yyyxxxx |
|||||
U+0080..U+07FF | 0000 0zzz yyyy xxxx | C2..DF 110zzzyy |
80..BF 10yyxxxx |
|||||
U+0800..U+0FFF | 0000 1zzz yyyy xxxx | E0 11100000 |
A0..BF 101zzzyy |
80..BF 10yyxxxx |
||||
U+1000..0xD7FF, 0xE000..U+FFFF * | uuuu zzzz yyyy xxxx | E1..EF 1110uuuu |
80..BF 10zzzzyy |
80..BF 10yyxxxx |
||||
UCS-4 | U+10000..U+3FFFF | 00vv uuuu zzzz yyyy xxxx | F0 11110000 |
90..BF 10vvuuuu |
80..BF 10zzzzyy |
80..BF 10yyxxxx |
||
U+40000..U+FFFFF | vvvv uuuu zzzz yyyy xxxx | F1..F3 111100vv |
80..BF 10vvuuuu |
80..BF 10zzzzyy |
80..BF 10yyxxxx |
|||
U+100000..U+10FFFF | 0001 0000 uuuu zzzz yyyy xxxx | F4 11110100 |
80..8F 1000uuuu |
80..BF 10zzzzyy |
80..BF 10yyxxxx |
|||
U+110000..U+1FFFFF | 0001 vvvv uuuu zzzz yyyy xxxx | F5..F7 111101vv |
80..BF? 10vvuuuu |
80..BF 10zzzzyy |
80..BF 10yyxxxx |
|||
U+200000..U+3FFFFFF | 00ss wwww vvvv uuuu zzzz yyyy xxxx | F8..FB 111110ss |
80..BF? 10wwwwvv |
80..BF 10vvuuuu |
80..BF 10zzzzyy |
80..BF 10yyxxxx |
||
U+4000000..U+7FFFFFFF | 0ttt ssss wwww vvvv uuuu zzzz yyyy xxxx | FC..FD 1111110t |
80..BF? 10ttssss |
80..BF 10wwwwvv |
80..BF 10vvuuuu |
80..BF 10zzzzyy |
80..BF 10yyxxxx |