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 0010step
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 10000010step
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にエンコードする方法について説明しました。
お読み頂きありがとうございました。