追記: nkf使えば、コマンドで一発で文字コード変換できます。
オンラインで公開されているUTF-8形式のCSVデータをmodelに入れたい
駅データがダウンロードできる「駅データ.jp」
大変ありがてぇ
このデータをDBに入れたいと思ったのですが、utf-8の扱いで結構戸惑ったので、ここにまとめます。環境はwindowsです。
まず立ちはだかる、文字化けるん
MSのExcelで作業する場合、普通に開くと、、、
まずは、普通にExcelで編集できるようにしましょう。
非常に簡単で、一度メモ帳で開いて保存しなおすだけ。
「ファイルを右クリック」 => 「プログラムから開く」 => 「メモ帳」
これを上書き保存しておくだけであら不思議、見事Excelでも正しく表示されるようになります。
どうやら、一度メモ帳を介すことで"BOM"と呼ばれる文字コードを解釈するためのデータが、ファイルの先頭部分に付与されるようです。
これにより、ExcelでもUTF-8のファイルが正しく読み込めるようになります。
Excel上で、自分に都合の良いようにデータをいじります。
BOMありのまま、CSVをインポートする際の第二の罠
さてインポートするぞと思いまして。こちらの記事を参考にインポートする手はずを整え、さぁ行くぞ!
ArgumentError - invalid byte sequence in UTF-8
いやまたか!
utf-8むずいです。
どうやら、BOMが付いてると余計なデータが付与されてしまうため、エラーが出てくるそう。
これを取り除く必要があります。
そこで出てくるのがTeraPad!
神でした。
ここに詳しいことはあるので、参考にしながらTeraPadでBOMを取り除きます。
行うこととしては、
「再びメモ帳で開く」 => 「カンマ区切りで保存されていることを確認したら、それをコピー」 => 「TeraPadに貼り付け」 => 「保存」
「文字/改行コード指定保存」から、保存形式として「utf-8n」、改行コード「LF」を選びます。csv形式が保存の際のファイルの種類として選択できなかったので、ファイルの種類は「すべてのファイル」にして、file_name.csvとして保存しましょう。
これで、問題なくいけます。わーい
お疲れさまでした。これでもう、utf-8も怖くない
参考
全モデルで使えるシンプルなインポート機能を実装する
- 大変助かった。すごい楽にimportできます。
文字コードをUTF-8 BOMなし(UTF-8N)でファイル保存をする方法
- TeraPad神かよ。もうメモ帳は捨てます