データベースの出力結果をcsv出力した際など、DBツールによってはcsvがBOMなしUTF-8で出力しちゃったりするとエクセルで見れなかったりします。
これはUTF-8だからではなくBOMなしだからです。
バイトオーダーマーク(byte order mark)の略とのこと。
このままではなんのこっちゃなので、もう少し詳しく書くと、「文字コードやどの種類の符号化形式なのか等をファイルの先頭の数バイトで判別するためのマーク」とのことです。
たとえば、UTF-8の場合だと、「0xEF 0xBB 0xBF」というデータになります。
これは特定のアプリケーションでファイルを読み込む時にBOM付きでないと文字が判別できないものがあるからです。
具体的に書くと、エクセルはBOM無しだとUTF8を判別できません。
macなら brew で簡単に nkf をインストールできます。
brew install nkfnkf --overwrite --oc=UTF-8-BOM file_namenkf --overwrite --oc=UTF-8 file_nameエクセルで開きたいならShiftJISに変換すればいいのではと思う人もいるかもしれないですが、
UTF-8からShiftJISへの変換は、文字の対応が完璧ではないので、変換できない文字が含まれる場合があります。これがつらいです。
これはnkfの問題ではなく文字コードの問題であり、プログラムで変換する際にも同様の問題が発生します。
そのため、「UTF-8のファイルをエクセルで開きたい」という要望に関してはBOM付きにしてあげるというのが良さそうです。