応用情報技術者 2012年 春期 午前2 問04
問題文
Unicode 文字列を UTF-8でエンコードすると、各文字のエンコード結果の先頭バイトは2進表示が 0 又は 11で始まり、それ以降のバイトは10で始まる。16進表示された次のデータは何文字の Unicode 文字列をエンコードしたものか。
CF 80 E3 81 AF E7 B4 84 33 2E 31 34 E3 81 A7 E3 81 99
選択肢
ア:9(正解)
イ:10
ウ:11
エ:12
Unicode文字列のUTF-8エンコード判定【午前2 解説】
要点まとめ
- 結論:与えられた16進データは9文字のUnicode文字列をUTF-8でエンコードしたものです。
- 根拠:UTF-8の先頭バイトは「0」または「11」で始まり、続くバイトは「10」で始まるため、先頭バイトの数が文字数に対応します。
- 差がつくポイント:バイト列を先頭バイトと継続バイトに正確に分け、先頭バイトの数を数えることが重要です。
正解の理由
UTF-8では、1文字の先頭バイトは以下のように始まります。
- 1バイト文字:0xxxxxxx
- 2バイト文字:110xxxxx
- 3バイト文字:1110xxxx
- 4バイト文字:11110xxx
一方、2バイト目以降は必ず「10xxxxxx」で始まります。
与えられた16進データを2進数に変換し、先頭バイト(0または11で始まる)を数えると9個あり、よって9文字と判定できます。
よくある誤解
UTF-8のバイト数=文字数と誤解しやすいですが、1文字が複数バイトになるためバイト数と文字数は一致しません。
また、継続バイト(10で始まる)を文字の先頭と誤認しないことが重要です。
また、継続バイト(10で始まる)を文字の先頭と誤認しないことが重要です。
解法ステップ
- 16進データをバイト単位(1バイト=2桁16進数)に分割する。
- 各バイトを2進数に変換し、先頭ビットを確認する。
- 先頭ビットが「0」または「11」で始まるバイトを「先頭バイト」と判定する。
- 「10」で始まるバイトは継続バイトとしてカウントしない。
- 先頭バイトの数を数え、それが文字数となる。
選択肢別の誤答解説
- イ: 10文字とするのは、継続バイトを誤って先頭バイトと数えた可能性があります。
- ウ: 11文字はバイト数に近い誤認で、UTF-8の多バイト文字の理解不足です。
- エ: 12文字はバイト数そのままの誤解で、UTF-8の構造を無視しています。
補足コラム
UTF-8は可変長エンコーディングで、ASCII文字は1バイト、漢字などは3バイト以上で表現されます。
先頭バイトのビットパターンを理解することは、文字数カウントや文字列処理で非常に重要です。
また、UTF-8は互換性が高く、世界中で広く使われています。
先頭バイトのビットパターンを理解することは、文字数カウントや文字列処理で非常に重要です。
また、UTF-8は互換性が高く、世界中で広く使われています。
FAQ
Q: UTF-8の先頭バイトはなぜ「0」または「11」で始まるのですか?
A: 先頭バイトのビットパターンで文字のバイト数を判別しやすくするためです。0は1バイト文字、11は多バイト文字の開始を示します。
A: 先頭バイトのビットパターンで文字のバイト数を判別しやすくするためです。0は1バイト文字、11は多バイト文字の開始を示します。
Q: 継続バイトはなぜ「10」で始まるのですか?
A: 継続バイトを区別するために「10」で始まるビットパターンが割り当てられており、先頭バイトと明確に区別できます。
A: 継続バイトを区別するために「10」で始まるビットパターンが割り当てられており、先頭バイトと明確に区別できます。
関連キーワード: UTF-8, Unicode, バイト列解析、文字コード、文字数カウント

\ せっかくなら /
応用情報技術者を
クイズ形式で学習しませんか?
クイズ画面へ遷移する→
すぐに利用可能!

