うさぎ小屋(仮)

📅  2021-11-06

「UTF-8のファイルをエクセルで開きたい」場合の対処法


問題点

データベースの出力結果をcsv出力した際など、DBツールによってはcsvがBOMなしUTF-8で出力しちゃったりするとエクセルで見れなかったりします。

これはUTF-8だからではなくBOMなしだからです。

BOMとは

バイトオーダーマーク(byte order mark)の略とのこと。

このままではなんのこっちゃなので、もう少し詳しく書くと、「文字コードやどの種類の符号化形式なのか等をファイルの先頭の数バイトで判別するためのマーク」とのことです。

たとえば、UTF-8の場合だと、「0xEF 0xBB 0xBF」というデータになります。

なぜBOM付きやBOM無しがあるのか

これは特定のアプリケーションでファイルを読み込む時にBOM付きでないと文字が判別できないものがあるからです。

具体的に書くと、エクセルはBOM無しだとUTF8を判別できません。

nkfを使ってBOM付きやBOM無しに簡単に変換できる

macなら brew で簡単に nkf をインストールできます。

brew install nkf

BOM付きに変換する

nkf --overwrite --oc=UTF-8-BOM file_name

BOM無しに変換する

nkf --overwrite --oc=UTF-8 file_name

nkfは文字コード変換できるけど万能じゃない

エクセルで開きたいならShiftJISに変換すればいいのではと思う人もいるかもしれないですが、

UTF-8からShiftJISへの変換は、文字の対応が完璧ではないので、変換できない文字が含まれる場合があります。これがつらいです。

これはnkfの問題ではなく文字コードの問題であり、プログラムで変換する際にも同様の問題が発生します。

そのため、「UTF-8のファイルをエクセルで開きたい」という要望に関してはBOM付きにしてあげるというのが良さそうです。