CSVの文字コードをUTF-8に移行しようとした話

この記事はAkerun Advent Calendar 5日目です。

はじめまして! AkerunのAPIや管理画面を主に開発しているエンジニアのhirataです。

CSVファイルをWindowsMicrosoft Excelで読み込んだ時、日本語が文字化けする問題を解決しようとした時の話です。

f:id:photosynth-inc:20171205201757p:plain

よく見る解決方法は、読み込もうとしているCSVファイルの文字コードSJISに変換してからExcelで開く事です。

f:id:photosynth-inc:20171205201920p:plain

しかし、SJISにも読めない文字が存在します。 例えば「土」に「口」の「𠮷」という文字です。使用している変換プログラムによっては「吉」ではなく「𠮷」を使う場合があるのでExcelで開くと文字化けします。

f:id:photosynth-inc:20171205202019p:plain

ここでもう一つの可能性がある方法を紹介したいと思います。 それは、UTF-8文字コードです。

UTF-8CSVエンコードすると「𠮷」という字も読めます。 だが、CSVUTF-8エンコードしてもExcelで開いたらまだ文字化けをしています。

ExcelUTF-8を開く時はUTF-8のBOM付きというCSVではないと正しく読み込めない事がわかりました。 BOMとはByte Order Markの略で簡単に説明するとファイルの先頭に、このファイルはUTF-8ですよと数バイト付けてあげる事です。

これでExcelでも「𠮷」が文字化けしないで読めます。

f:id:photosynth-inc:20171205202100p:plain

文字化けしない事がわかったのでとりあえずCSVを「𠮷」で埋め尽くして保存しましょう。

f:id:photosynth-inc:20171205202148p:plain

少し寝かせて出来上がった物がこちらです。

f:id:photosynth-inc:20171205202224p:plain

え?

そうなんです、ExcelUTF-8のBOM付きのファイルを編集して保存をしたらBOMをはずしてしまうのです。 読める事はできるが編集ができないCSVファイル、、、、

読み込む事はできても編集ができないのでこれからもSJISで頑張りたいと思います。

今回は、皆様が同じような過程で時間を無駄にしないように記事にしてみました。