文字化けちゃん by FastSDCPU |
CSVファイルやタブ区切りのTSVファイルは、システムと人との間でデータをやり取りするフォーマットとして大変わかりやすいです。
そのため使用する機会が多いです。
昔から日本語版Windowsの文字コードがShift-JIS(正確にはMS932)のため、 文字コードは何も意識しないとShift-JISが使われていました。
しかしWindowsも10、11と進化するうちにメモ帳アプリでさえUnicodeのUTF8が使用可能になってきました。
テキストファイルがUTF8で読み込み編集できるため、CSVファイルもUTF8になることも多くなりました。
しかしUTF8で保存したCSVファイルをExcelで開くと文字化けします。
長年できないと思い込み、UTF-8からShift-JISに文字コード変換してから開いていました。
普通に「excel csv 文字化け」といったキーワードでGoogle検索しても、「Shift-JISに変換してから開く」という、昔ながらの対処方が上位に出てきます。
しかし最近はUTF8に依存する文字種も使われるようになり、単に文字コード変更するとUnicodeには存在するがShift-JISには存在しない文字などがあり。その場合情報が欠落してしまって困った事になるケースがあります。
具体的には絵文字😁などが該当します。
Officeのバージョンも進化しているし、何か対策されてるんじゃないかと思い調べました。
すると、マイクロソフトにこういう記述がありました。
UTF-8 でエンコードされた CSV ファイルは、BOM (バイト順マーク) で保存されている場合は、通常どおり開くことができます。
BOM付ならば開ける?、え?嘘?
やってみた
ありがちな名簿っぽいCSVファイルを作ります。
文字コードはUTF8 改行コードはCRLFです |
このファイルをデスクトップに保存し、ダブルクリックしてExcelで開いてみます。
はい、化けました。
はい、化け化け、読めません |
ではBOM付で保存してみます。
サクラエディタで[ファイル]->[名前を付けて保存]を選び、BOM付のチェックを付けて上書き保存します。
再度でダブルクリックしてExcelで開いてみます。
化けてません! |
ダブルクリックで文字化けせず開けた・・
Excelで開く予定のあるCSVファイルはUTF8(BOM付)で保存すべきだと強く感じた。
プログラムがCSVダウンロードをさせる場合もBOM付で出力すべきである。
しかもOffice2007とかいう遺物バージョンのExcelでもBOM付なら文字化けせずに開けた。
知らないのは自分だけ?こんな有益な事を数十年レベルで知らなかったことに割とショックである。
そもそもBOMをよく知らなかった・・というか知ろうとしていなかった。
BOM付とは
BOMはバイトオーダーマーク(Byte Order Mark)の略らしく、テキストファイルの符号化方式の種類を記してるらしい、つまり、ファイルの先頭に「UTF8のファイルだよ」って書いてあるってことだ。
意味を聞けば納得します。