🦏

スプレッドシートからダウンロードしたCSVが処理できない

2023/10/10に公開

GoogleスプレッドシートからCSVをダウンロードして処理しようとすると、稀にうまく動かないことがあります。もしかしたら改行コードが対応していないからかもしれません。

改行コードとは

改行を表す制御文字です。下記の図のように、OSによって対応している改行コードが違います。

OS 改行コード 改行コード(16進)
Unix, Unix系のOS LF 0A
Windows CR+LF 0D 0A

改行コードの種類がわかったところで、スプレッドシートからダウンロードしたCSVファイルの改行コードを見てみましょう。

改行コードを確認する

適当なスプレッドシートをCSVとしてダウンロードして、hexdumpコマンドでバイナリを見てみましょう。hexdumpコマンドを使うことで、特定のファイルや標準入力の内容を16進数でダンプできます。
https://atmarkit.itmedia.co.jp/ait/articles/1810/26/news039.html

スプレッドシートでCSVを保存する


hexdumpを実行

上記の画像を見てみると、改行部分がWindowsの改行コードである 0d 0a になっていることが分かります。このままではUNIX系のOSを使っている際にうまく操作できないことがあります。そこで、改行コードを変換してみましょう。

改行コードを変換する

nkfコマンドで、Windowsの改行コード 0d 0a を UNIX系の 0a(LF) に変換することができます。
https://atmarkit.itmedia.co.jp/ait/articles/1609/29/news016.html

nkf -Lu hoge.csv > fuga.csv

変換後

再度hexdumpで確認してみると、改行コードが0aになったことが確認できます。

hexdumpで改行コードの確認

おまけ: RFCでは

CSVファイルのフォーマットは RFC4180 で定義されています。この中には改行コードについての言及があり、下記のようにレコードは CRLF で区切られると示されています。

  1. 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