「UTF-8」や「UTF-16」等の一部の文字コードには、「BOM」と呼ばれるフラグのようなものを付ける場合があります。
BOMはファイルの先頭につけられるバイナリのデータであり、UTF-8の場合は16進数で「EF BB BF」、UTF-16の場合は16進数で「FE FF」となります。
(詳しくは、英語版のWikipediaに記載があります
BOMは、そのファイルが何の文字コードを使用しているか判定するために用いられるものです。
BOMは現在は使用されることが少なく、使用すると逆にトラブルの元になることもあります。
しかし、現在でもBOMを使用するソフトウェアは存在し、その代表例はExcelです。
Excelでは標準の文字コードがSJISですが、BOM付きのファイルを読み込んだ場合はBOMが示す文字コードが使用されます。
以下では、読み込みと書き込みの例を示します。
【読み込み】
以下はBOM無しのUTF-8のCSVファイルです。
![](https://cyzennt.co.jp/blog/wp-content/uploads/2024/03/c26ed81b2d752ebdab2242f74fd3545d.jpg)
バイナリエディタでファイルを開くと以下の通りです。
ファイルの先頭に「EF BB BF」がありません。
![](https://cyzennt.co.jp/blog/wp-content/uploads/2024/03/6b20f06634901ffc407ea384912fdf8a.jpg)
これをExcelで開くと、SJISと判定され、文字化けします。
![](https://cyzennt.co.jp/blog/wp-content/uploads/2024/03/af0fb907f281e5a4170e024836d889d9.jpg)
今度は、同じデータで、BOMを付与したCSVファイルを用意します。
バイナリエディタでファイルを開くと以下の通りです。
ファイルの先頭に「EF BB BF」があります。これがBOMです。
![](https://cyzennt.co.jp/blog/wp-content/uploads/2024/03/aee7f6e8a0df833c18c42f2279ffcdc9.jpg)
これをExcelで開くとUTF-8と判定され、文字化けしません。
![](https://cyzennt.co.jp/blog/wp-content/uploads/2024/03/324cbfe23c938792aebc9abff1b4de38.jpg)
【書き込み】
Excelで開いたCSVファイルを、「Unicodeテキスト(*.txt)」形式で保存します。
すると、BOM付きのUTF-16形式でデータが保存されます。
![](https://cyzennt.co.jp/blog/wp-content/uploads/2024/03/bcd121bc5679ba658b309161eae485d8.jpg)
これをExcelで開くと、UTF-16形式のBOMである「FE FF」が確認できます。
![](https://cyzennt.co.jp/blog/wp-content/uploads/2024/03/0d84afaee545e8b51f7f42a0722d9b3a.jpg)
最後の投稿から日が開いてしまいましたが、ゴールデンウィークということで、久々の投稿です!
個のスキルを固める上で有用な書籍として、先日、株式会社サイゼントから書籍「絶対にJavaプログラマーになりたい人へ」を発売しました。
同時に、Javaプログラマーとしてのキャリアをスタートしたい人向けのプログラミングスクール「サイゼントアカデミー」も開校しました。
ご興味のある方は是非!
この記事が何かの役に立てば幸いです。
コメント