Excel CSVと標準CSVの本当の違いは何ですか?
たとえば、1つのセル内で改行を含む列を処理する場合、どのように異なる方法でエンコードしますか?
Excel CSVと標準CSVの本当の違いは何ですか?
たとえば、1つのセル内で改行を含む列を処理する場合、どのように異なる方法でエンコードしますか?
回答:
「標準」CSVとして定義するものに完全に依存します。私に関する限り、Excel は「CSVファイルの一般的な形式とMIMEタイプ」であるRFC 4180で概説されているルールに従います。
最初の行の最初のセルに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"
あまり洗練されていません。0D
改行がセル内にあった場所にキャリッジリターン(hex )を挿入します。すべてのセルは二重引用符で囲まれています。また、実際の行はキャリッジリターンで区切られます。
これを正しく解析するために、CSVパーサーは以下を行う必要があります。
そうしないと、このような文字化けが発生します。改行が無視されなかったため、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ファイルも読み取ることができるはずです。
元のcsv実装からの私の理解は、すべてのテキストフィールドが引用符で囲まれており、数字を含める必要はないということでした。Excelはこれを行いません。Excelで生成されたcsvファイルをMicrosoft以外のプラットフォームにアップロードしようとすると失敗します。これはマイクロソフトの標準的なアプローチであり、相互運用性を無視して、盲目的にルールに従うことに焦点を合わせています。IEでも同様のことが起こりました。パディングとマージンの属性についてはhtml / cssルールに正しく従い、既存のすべてのWebページとWebブラウザーがそれらを異なる方法で処理するという事実を無視しました。その結果、ほぼすべてのWebページにIE用の特別なルールが追加されました。Excelで生成されたcsvファイルは役に立たないので、「連結」関数の列を使用して手動で適切に作成します。