記事一覧

BOMについて~私の失敗談~

今回は、BOMについての失敗談について書いてみたいと思います。

"BOM"(ボム)とは、正式には、バイトオーダーマーク (byte order mark) あるいはバイト順マーク(バイトじゅんマーク)と言われ、Unicodeの符号化形式で符号化したテキストの先頭につける数バイトのデータのことである。このデータを元にUnicodeで符号化されていることおよび符号化の種類の判別に使用する。

以前、外部から入力したテキストファイルと内部で生成したテキストファイルとの比較を行うプログラムを作成したのですが、どうしても一致しないという不具合が発生しました。
テキストファイルなので、外部/内部いずれのファイルもテキストエディタで確認できるので開いてみると....
ファイル 262-1.jpg

うん、外部/内部いずれも見た目は同じ。なぜ、これが一致しないのやら(@o@)
悩むこと半日、神の声(?)、そういえば、今回の符号化形式は、Unicodeではないか!
早速、バイナリエディタで開くと
《外部からのテキストファイル》
ファイル 262-2.jpg

《内部で生成したテキストファイル》
ファイル 262-3.jpg

ガーン!(*o*)、外部からのテキストファイルはテスト用に自作したのですが、どうやら、BOM付でファイル出力する様になっていました。比較を行うプログラムは、バイトストリームで先頭から1byteづつ比較する様になっており...先頭3byteのBOMで不一致になっていることが判明!
更によくよく確認すると比較を行うプログラムは、以前のシフトJISを前提としたもので今回の仕様変更によるUnicodeは考慮していないとのこと。
原因がわかり、ホッとしました(^。^;A

【今回の教訓】
・Unicodeにより符号化されたファイルは、BOM付の場合もあるので、確認が必要
・文字コードに関する仕様変更時は、採用した文字コードの仕様に注意すること

そんな、クマノミンでした(TへT)
おわり。