Unicode_utf8 のバックアップ(No.3) - アールメカブ

アールメカブ


Unicode_utf8 のバックアップ(No.3)


Rの備忘録

たとえば "あ" の UTF-8 での文字コードは

> charToRaw("あ")
[1] e3 81 82

なのですが,Unicode では

> library(Unicode)
> as.u_char(utf8ToInt("あ" ))
[1] U+3042

です.

Windows環境では CP932 コードなので

> charToRaw("あ")
[1] 82 a0
> as.u_char(utf8ToInt(iconv("あ", to= "UTF-8")))
[1] U+3042

この変換規則は,ここ に分かりやすく書かれています.一部引用します.


UCS-2(Universal Character Set coded in 2 octets)は2バイトのUnicodeのデータです。ASCIIの”a”と言う文字は0041の2バイトで、「U+0041」と表記します。UTFとは「Unicode Transformation Format, 8-bit encoding form」の略でASCIIとのご完成を保つために作られたようです。ASCIIは1バイトで表し、漢字コードなどは3バイトで表します。

UCS-2からUTF-8の変換表

UCS-2	ビット列	第1バイト	第2バイト	第3バイト
U+0000...U+007F	00000000-0xxxxxxx	0xxxxxxx	なし	なし
U+0080...U+07FF	00000xxx-xxyyyyyy	110xxxxx	10yyyyyy	なし
U+0800...U+FFFF	xxxxyyyy-yyzzzzzz	1110xxxx	10yyyyyy	10zzzzzz

例として、上記の表から、”あ”と言う文字を変換します。Unicodeで”あ”はU+3042ですのでこれをビット列にすると、

 「0011 0000 0100 0010」

となり、表を参考にしてxyzに分けると、

「xxxx=0011、yyyyyy=000001、zzzzzz=000010」

バイト単位に組み立てます。

 第1バイト=11100011 HEX表記でE3
 第2バイト=10000001 HEX表記で81 
 第3バイト=10000010 HEX表記で82

UTF−8で”あ”の文字コードはE38182です。