web-dev-qa-db-ja.com

ExcelCSVと標準CSVの真の違い

Excel CSVと標準CSVの真の違いは何ですか?

たとえば、1つのセル内で改行のある列を処理する場合、それらをどのように異なる方法でエンコードしますか?

16
user157195

これは、「標準」CSVとして定義する内容に完全に依存します。私に関する限り、Excelは RFC 418 、「CSVファイルの一般的な形式とMIMEタイプ」で概説されているルールに従います。

最初の行の最初のセルに2つの改行があるテーブルを考えます。 Excelでは、次のようになります。

+---+---------------+------------+------------+
|   | A             | B          | C          |
+---+---------------+------------+------------+
| 1 | col1, line1a  |            |            |
|   | col1, line1b  |            |            |
|   | col1, line1c  | col2, row1 | col3, row1 |
| 2 | col1, row2    | col2, row2 | col3, row2 |
+---+---------------+------------+------------+

では、Excelはこれをどのようにエクスポートしますか?見てみましょう–テキストエディタはこれを表示します:

"col1, line1a
col1, line1b
col1, line1c","col2, row1","col3, row1"
"col1, row2","col2, row2","col3, row2"

あまり洗練されていません。キャリッジリターン(16進0D)改行がセルにあった場所。すべてのセルは二重引用符で囲まれています。また、実際の行はキャリッジリターンで区切られます。

これを正しく解析するために、CSVパーサーは

  • 二重引用符で囲まれたキャリッジリターン(セルなど)を無視する
  • not二重引用符の外にある場合のキャリッジリターンを無視する

それができなかった場合、このような文字化けが発生します。これで、2行ではなく4行になることに注意してください改行を無視できませんでした。

+---+---------------+------------+------------+
|   | A             | B          | C          |
+---+---------------+------------+------------+
| 1 | "col1, line1a |            |            |
| 2 | col1, line1b  |            |            |
| 3 | col1, line1c" | col2, row1 | col3, row1 |
| 4 | col1, row2    | col2, row2 | col3, row2 |
+---+---------------+------------+------------+

しかし、RFCが何を言っているか見てみましょう、多分Excelはそれを正しくしましたか?

改行(CRLF)、二重引用符、およびコンマを含むフィールドは、二重引用符で囲む必要があります。

きちんとした、それはまさにExcelがしたことです。要約すると、Excelは「標準」のCSVファイルの推奨事項に従っているようです。適切なCSVパーサーがあれば、ExcelのCSVファイルも読み取ることができるはずです。

19
slhck