Unicodeの「あ(U+3042)」をUTF-8で表すと「0xe3 0x81 0x82(e3 81 82)」になります。
この記事ではUnicodeからUTF-8にエンコードする方法を詳しく説明します。
「あ(U+3042)」をUTF-8で表すと「0xe3 0x81 0x82(e3 81 82)」になる理由
UnicodeからUTF-8にエンコードする方法について説明します。以下のエンコード手順に沿って、エンコードを行うと、Unicodeの「あ(U+3042)」がUTF-8では「0xe3 0x81 0x82(e3 81 82)」になる理由が分かります。
エンコード手順
- 16進数を2進数に変換する
- UTF-8にエンコードする際のルールに適用する
- 2進数を16進数に戻す
各手順について順番に説明します。
step
116進数を2進数に変換する
まず、あ(U+3042)を2進数に変換します。U+3042は16進数なので2進数に変換すると0011 0000 0100 0010
となります。
3 0 4 2
↓ 2進数に変換
0011 0000 0100 0010
step
2UTF-8にエンコードする際のルールに適用する
UnicodeからUTF-8にエンコードする際のルールは以下のようになっています。
Unicodeの文字範囲 | UTF-8のビットパターン |
U+0000~U+007F (1バイト文字) | 0xxxxxxx (00~7F) |
U+0080~U+07FF (2バイト文字) | 110xxxxx 10xxxxxx (C2〜DF) (80〜BF) |
U+0800~U+FFFF (3バイト文字) | 1110xxxx 10xxxxxx 10xxxxxx (E0〜EF) (80〜BF) (80〜BF) |
U+10000~U+10FFFF (4バイト文字) | 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx (F0〜F4) (80〜BF) (80〜BF) (80〜BF) |
3バイト文字をUTF-8にエンコードする際、UTF-8のビットパターンは1110xxxx 10xxxxxx 10xxxxxx
になります。この場合、最初のバイトはE0
〜EF
まで、2番目のバイトは80
〜BF
まで、3番目のバイトは80
〜BF
までの値を取り得ます。
あ(U+3042)は3バイト文字の範囲に入るため、3バイトでエンコードされます。具体的な変換プロセスを以下に示します。
具体的な変換プロセス
- 最初のバイト
- 3バイト文字の場合、最初のバイトは
1110xxxx
の形式を取ります。 - U+3042の上位4ビット(0011)を
xxxx
に置き換えます。結果は11100011
になります。
- 3バイト文字の場合、最初のバイトは
- 次のバイト
- 次のバイトは
10xxxxxx
の形式を取ります。 - U+3042の次の6ビット(000001)を
xxxxxx
に置き換えます。結果は10000001
になります。
- 次のバイトは
- 最後のバイト
- 最後のバイトも
10xxxxxx
の形式を取ります。 - U+3042の最後の6ビット(000010)を
xxxxxx
に置き換えます。結果は10000010
になります。
- 最後のバイトも
1110xxxx 10xxxxxx 10xxxxxx
↓
11100011 10000001 10000010
step
22進数を16進数に戻す
先ほど変換した2進数を16進数に戻すと以下のようになります。
11100011 10000001 10000010
↓
1110 0011 1000 0001 1000 0010
↓ 16進数に変換
e 3 8 1 8 2
↓
e3 81 82
この手順に従って、エンコードを行うと、Unicodeの「あ(U+3042)」がUTF-8では「0xe3 0x81 0x82(e3 81 82)」になることが分かります。
補足
UTF-8では先頭のバイトが文字の長さを示しています(1バイト目の先頭ビットの数で何バイト文字かが分かる)。また、その後に続くバイトが10
で始まることで、それが続きのバイトであることを示しています。そのため、上表に示すようなビットパターンになっています。
本記事のまとめ
この記事ではUnicodeからUTF-8にエンコードする方法について説明しました。
お読み頂きありがとうございました。