スプレッドシートからダウンロードしたCSVが処理できない
GoogleスプレッドシートからCSVをダウンロードして処理しようとすると、稀にうまく動かないことがあります。もしかしたら改行コードが対応していないからかもしれません。
改行コードとは
改行を表す制御文字です。下記の図のように、OSによって対応している改行コードが違います。
OS | 改行コード | 改行コード(16進) |
---|---|---|
Unix, Unix系のOS | LF | 0A |
Windows | CR+LF | 0D 0A |
改行コードの種類がわかったところで、スプレッドシートからダウンロードしたCSVファイルの改行コードを見てみましょう。
改行コードを確認する
適当なスプレッドシートをCSVとしてダウンロードして、hexdumpコマンドでバイナリを見てみましょう。hexdumpコマンドを使うことで、特定のファイルや標準入力の内容を16進数でダンプできます。
スプレッドシートでCSVを保存する
hexdumpを実行
上記の画像を見てみると、改行部分がWindowsの改行コードである 0d 0a
になっていることが分かります。このままではUNIX系のOSを使っている際にうまく操作できないことがあります。そこで、改行コードを変換してみましょう。
改行コードを変換する
nkfコマンドで、Windowsの改行コード 0d 0a
を UNIX系の 0a
(LF) に変換することができます。
nkf -Lu hoge.csv > fuga.csv
変換後
再度hexdumpで確認してみると、改行コードが0aになったことが確認できます。
hexdumpで改行コードの確認
おまけ: RFCでは
CSVファイルのフォーマットは RFC4180 で定義されています。この中には改行コードについての言及があり、下記のようにレコードは CRLF
で区切られると示されています。
Each record is located on a separate line, delimited by a line
break (CRLF). For example:aaa,bbb,ccc CRLF
zzz,yyy,xxx CRLF
なので、スプレッドシートからダウンロードできるCSVの改行コードはRFC4180に準拠していると言えそうです。RFC準拠の仕様ですし、大抵のソフトウェアでは本記事のように改行コードで困る心配はなさそうです。
Discussion