UTF-8を使って作成したCSVをExcelで開くと文字化けする問題
UTF-8を使って書き出したCSVファイルをExcelで開くと文字化けしてしまいました。
この問題について解説します。
デフォルトはShift-JIS
ExcelでCSVを開くと、デフォルトでは文字コードはShift-JISになってます。
試しにExcelで
こんな感じのデータをCSVで保存して、バイナリエディタから確認してみます。
エンコードをShift-JISにした時に正しく読み取れました。
なので、基本的にExcelはCSVファイルを開くときはShift-JISで開こうとします。
ですが、UTF-8で開くこともできます。
というか、Excelの保存ダイアログに
CSV(コンマ区切り)とCSV
UTF-8(コンマ区切り)が存在しているので
UTF-8で保存はできるんです。
ではどうやってShift-JISとUTF-8を切り替えているのかというと、BOMがついているからです。
BOMとは
BOMとはbyte order markの略でUnicodeで符号化したテキストの先頭に付与される数バイトのデータのことです。
これがあるかないかでExcelはエンコードを決めています。
ためしにさっきと同じデータをCSV
UTF-8で保存してバイナリエディタから見てみると
こうなっています。
0xE5A3B1が「壱」なので、先頭に0xEF 0xBB 0xBFが余分に付与されているのがわかります。
これがUTF-8のBOMです。
UTF-16の場合はビッグエンディアンの時0xFE 0xFFで、リトルエンディアンの時0xFF 0xFEとなります。
他のUnicodeテキストのBOMはWikipedia先生を見てください。
つまり、UnicodeでCSVを書き出した時にExcelで正しく表示するには先頭にBOMをちゃんと付けましょう。
という話でした。
ディスカッション
コメント一覧
まだ、コメントがありません