LoginSignup
1

More than 5 years have passed since last update.

BOMに関わるトラブル(個人メモ)

Last updated at Posted at 2018-02-24

コードの品質チェックでBOMーUTF8が発見されたので
Webページをあたっていくつかピックアップ。

なるほど、即刻直すべき、、、と。

Javaで書かれた処理プログラムがUTF-8のテキストを読み込む際に、BOMを消費せずに単なるUnicode文字のように扱うため、1行目のデータの先頭にゴミが付いた状態になっていたのです。それで、見えないゴミ付きのデータになってしまい、意図どおりに動作しないし、テキストエディタで開いてみても異常に気付かなかったわけです。

JavaのライブラリでUTF-8のテキストを読み込むとき、先頭にBOMがあると、それを単なるU+FEFFという符号位置の文字データとして読み込んでしまいます。本来のBOMは、Byte Order Markという名前のとおり、バイト順を示す役割のものであって、文字を符号化したデータの一部ではありません。UTF-16/32と違ってバイト順の問題のないUTF-8にBOMを付けるべきかという問題は議論が分かれるところかもしれません。しかし現実にはBOM付きUTF-8は生成されることがあります。

ウェブ検索で「java utf-8 bom」などとしてみると、BOM付きUTF-8をJavaで読み込んでトラブルになった話が複数出てきたり、また互換性のためにJavaではUTF-8読み込み時の挙動を変える予定はなさそうだという話が出てきたりします。

Javaで、UTF-8文書を扱う時に具体的に注意するシーン †
Javaプログラムで独自形式の設定ファイルの読み込むとき
JavaプログラムでXML文書を読み込む時
Windows の notepad(メモ帳) は、BOM付きのUTF-8 形式でファイルを記録するので、notepad(メモ帳)では、これらの文書を編集してはいけない

うん、なるほど!

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1