忍者ブログ
情報処理技術者試験の合格を目指す全受験者のための、1問1問「徹底解説」ブログです。単なる過去問の暗記ではなく、なぜその答えになるのかを本質的に理解できるよう解説します。書籍などでは学べない最新用語やトレンドを踏まえてご紹介します。

【プログラミング】テキスト先頭の隠れた識別子!「BOM付UTF-8(U+FEFF)」|情報処理問題1000本ノック

基本情報技術者試験や応用情報技術者試験のプログラミング・文字コード分野で頻出の重要テーマ。「BOM(Byte Order Mark)」の役割と、UTF-8やUTF-16における挙動の違いを攻略しましょう。

1. 【 問題 】:テクノロジ系(文字コード・データ表現)

【 問題 】 Unicode文字コードのエンコーディング方式に関する記述です。テキストデータの最先頭にバイト順序(エンディアン)や文字コードの識別用として特殊な制御文字「\ufeff(U+FEFF)」を埋め込む仕様を表す用語として、適切なものはどれか。

(ア)UTF-8(BOMなし)
(イ)BOM付UTF-8(UTF-8 with BOM)
(ウ)Base64
(エ)Unicode正規化(NFC)

2. 正解:

正解:(イ)BOM付UTF-8(UTF-8 with BOM)

3. 解説:「『\ufeff』はファイルの先頭に刻む文字コードの印!」

BOM(Byte Order Mark)は、元々はUTF-16やUTF-32などの複数バイト文字コードで「ビッグエンディアンか・リトルエンディアンか」というバイトの並び順(エンディアン)を識別するための仕組みです。
Unicode規格上の文字コード値として **`U+FEFF`** (ZERO WIDTH NO-BREAK SPACE)が割り当てられています。

【BOMの役割とUTF-8における特徴まとめ】 ← 超頻出ポイント!

項目仕様・特徴
先頭の制御記号 Unicode表記:`\ufeff`(U+FEFF)
UTF-8でのバイト列:`0xEF, 0xBB, 0xBF`(16進数3バイト)
本来の目的 2バイト単位で処理するUTF-16等でバイトの読み順(エンディアン)を判別するため。
UTF-8での目的・影響 1バイト単位処理のため本来エンディアン識別は不要だが、「このファイルはUTF-8である」という目印として使用。ただし、対応していないプログラム(WebサーバやJSONパーサー等)ではパースエラーや想定外の余白バグの原因になる。

1. 理解のコツ:
・ExcelなどでCSVファイルを開く際、Shift_JISと誤認されて文字化けするのを防ぐためにBOM付UTF-8(`\ufeff`で始まるファイル)が重宝されます。
・一方で、PythonやNode.jsなどのプログラムでJSONやCSVを読み込む際、先頭の `\ufeff` が「余分な不視記号」として読まれてしまいエラーになるケースがあるため注意が必要です。

2. 試験対策の視点:
問題文に「テキストの先頭」「\ufeff」「0xEF, 0xBB, 0xBF」「文字コードの識別標識」「Byte Order Mark」と来たら、迷わずBOM(BOM付UTF-8)を選択しましょう!


4. まとめ

テキストデータの最先頭に制御文字 `\ufeff`(16進数の `0xEF, 0xBB, 0xBF`)を挿入して文字コードを識別させる仕様。これがBOM付UTF-8です。実務やプログラミングで頻出の文字化け・エラー原因としても確実に押さえておきましょう!


PR