たとえば "あ" の 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です。