技術とか戦略とか

SIerで証券レガシーシステムを8年いじってからSESに転職した業務系エンジニアによる技術ブログ。

Excel:文字コードのBOMについて

UTF-8」や「UTF-16」等の一部の文字コードには、「BOM」と呼ばれるフラグのようなものを付ける場合があります。
BOMはファイルの先頭につけられるバイナリのデータであり、UTF-8の場合は16進数で「EF BB BF」、UTF-16の場合は16進数で「FE FF」となります。
(詳しくは、英語版のWikipediahttps://en.wikipedia.org/wiki/Byte_order_mark)に記載があります)
 
BOMは、そのファイルが何の文字コードを使用しているか判定するために用いられるものです。
BOMは現在は使用されることが少なく、使用すると逆にトラブルの元になることもあります。
しかし、現在でもBOMを使用するソフトウェアは存在し、その代表例はExcelです。
 
Excelでは標準の文字コードSJISですが、BOM付きのファイルを読み込んだ場合はBOMが示す文字コードが使用されます。
 
以下では、読み込みと書き込みの例を示します。
 
【読み込み】
以下はBOM無しのUTF-8CSVファイルです。

f:id:akira2kun:20211119235159j:plain
 
バイナリエディタでファイルを開くと以下の通りです。
ファイルの先頭に「EF BB BF」がありません。

f:id:akira2kun:20211119235217j:plain

 
これをExcelで開くと、SJISと判定され、文字化けします。

f:id:akira2kun:20211119235243j:plain

 
今度は、同じデータで、BOMを付与したCSVファイルを用意します。
バイナリエディタでファイルを開くと以下の通りです。
ファイルの先頭に「EF BB BF」があります。これがBOMです。

f:id:akira2kun:20211119235259j:plain

 
これをExcelで開くとUTF-8と判定され、文字化けしません。

f:id:akira2kun:20211119235319j:plain

 
【書き込み】
Excelで開いたCSVファイルを、「Unicodeテキスト(*.txt)」形式で保存します。
すると、BOM付きのUTF-16形式でデータが保存されます。

f:id:akira2kun:20211119235336j:plain

 
これをExcelで開くと、UTF-16形式のBOMである「FE FF」が確認できます。

f:id:akira2kun:20211119235349j:plain