データとスプレッドシート · CSV クリーナー
RFC 4180 の説明: 公式標準に最も近い CSV
· 背景
csv rfc-4180 データ形式
CSV は、誰かが書き込む前から何十年も前から存在していました。この投稿では、RFC 4180 について、区切り文字、引用符、行末、ヘッダーについて実際にどのようなことが書かれているか、そしてなぜ実際のファイルが RFC 4180 を無視するのかを説明します。
単一のパーサーが正しく読み取れない 2 つの「有効な」 CSV ファイル — 標準がないままこの形式が数十年にわたって成長した理由
2 つのファイルは両方とも .csv 拡張子を付けることができますが、1 つはセミコロンを使用し、もう 1 つはタブを使用し、それぞれ異なる方法で引用符を適用します。パーサーは、句読点が構造になる前に方言を知っている必要があります。 ToolAcre は 4 つの候補から開始し、拡張機能を信頼するのではなく、解析されたサンプル形状をスコア付けします。
この柔軟性により、「有効な CSV」がしばしば不完全な説明となる理由が説明されます。クリーナーは一般的な偏差を受け入れて、一貫した結果をシリアル化できます。その動作は構成とテストによって定義され、すべてのプロデューサーが 1 つのメモに完全に従うと仮定するよりも有用なコントラクトが得られます。
RFC 4180 とは — 拘束力のある標準ではなく、一般的な慣行を文書化した 2005 からの情報メモ
リポジトリは出力規則として RFC 4180 を繰り返し指定していますが、これはメモの日付や法的地位に関する歴史的な主張の情報源ではありません。したがって、この記事では、レコードの終わり、引用符、ヘッダーの幅、区切り文字の処理など、実装によって具体化されるルールに焦点を当てます。
外部標準の歴史が重要な場合は、一次出版物を別途引用してください。 ToolAcre を使用する場合、関連する証拠はローカルです。コードのデフォルトは CRLF で、構造文字を引用符で囲み、内部引用符を 2 重にし、ヘッダーとは異なる幅の行を報告します。
リポジトリの証拠は、ターゲット規則として RFC 4180 を使用します。公開履歴がソース セットの外にあります
構成されたターゲットは、カンマ区切りの出力、CRLF 行末、オプションのヘッダー概念、および長方形の行を記述します。出荷ルートでは、最初の行は実際にはオプションではありません。常にヘッダーとして使用されます。ヘッダーのないファイルは、そのロールに対する最初のレコードを失います。
不規則な入力は拒否を引き起こしません。短い行には空のセルが埋め込まれます。長い行には余分な行が保持され、両方とも行番号付きの警告が表示されます。シリアライザーは保持されているすべての行を書き込むため、「クリーンな出力」とは、プログラムが構造の不一致を修正する方法を推測したことを意味するものではありません。
メモによる引用 — フィールドを引用符で囲む必要がある場合と、リテラルの二重引用符がどのように二重になるか
フィールドに選択した区切り文字、引用符、またはレコード終了文字が含まれる場合は、フィールドを引用符で囲む必要があります。 ToolAcre は、先頭または末尾のスペースをさらに引用符で囲み、別のパーサーがそれらを暗黙的にトリミングしないようにします。引用符で囲まれたフィールド内では、リテラルの各二重引用符は 2 つの二重引用符になります。
Quote each フィールドスイッチは、統一されたスタイルを要求します。それ以外の場合、出力は最小限に引用されます。解析された値は同じままですが、冗長なソース引用符が消える場合があります。この正規化は予期されており、テストで選択された例の正確な出力だけでなく、復元されたテーブルも比較するのはこのためです。
text/csv メディア タイプ — オプションのヘッダーと文字セット パラメーター、およびこれらがディスク上のファイルと一緒に転送されることがほとんどない理由
ディスク上のファイルがメディア タイプ パラメータを添付して到着することはほとんどありません。 ToolAcre は、選択されたファイルから `header` または `charset` パラメーターを読み取りません。これは、そのルート コントラクト、UTF-8 テキスト、最初の行ヘッダー、およびサポートされている区切り文字検出または手動選択に依存しています。
オプションの BOM エクスポート スイッチは、最初のヘッダーの前に U+FEFF を書き込みます。これにより、スプレッドシートが UTF-8 を認識するのに役立つ可能性がありますが、構成では、マーカーが削除されない場合に名に結合されるため、厳密なスクリプトまたはデータベースのインポートが中断される可能性があると警告されます。消費者が要求しない限り、オフのままにしておきます。
世界が分岐する場所 — セミコロン、LF 行末、不規則な行、ラベルのないエンコーディング、およびメモがそのどれも許容しない理由
実際の入力では、セミコロン、タブまたはパイプ、LF または単独の CR、不均一な行、および先頭の UTF-8 BOM を使用できます。パーサーは、これらすべての行末と区切り文字候補を意図的に受け入れます。不規則な行を黙って「許容」しません。データを保持し、警告を添付します。
クローズされていない見積も、承認されているが報告されているもう 1 つの条件です。明確な終了境界が存在しないため、開始引用符以降はすべて 1 つのフィールドになります。エクスポートを信頼する前に、そのソースを修正してください。寛容な解析は保存戦略であり、入力が準拠していることを証明するものではありません。
ToolAcre は、現実世界のいくつかの逸脱を拒否するのではなく、不規則な行をレポートしながら受け入れます。
ここでは、セルに数値、ブール値、または null 型を与えるルールはありません。パーサーは文字列を返し、JSON コンバーターはそれらを文字列として保存します。送信者と受信者は、空白テキストが欠落しているかどうか、数字シーケンスが識別子であるかどうかなど、意味上の規則に同意する必要があります。
フォーミュラインジェクションの安全性は、CSV 構文の上に階層化されたエクスポート ポリシーです。有効にすると、通常の数値形式を除き、危険な先頭文字にはアポストロフィが付けられます。これは、スプレッドシートの安全性を確保するために値を意図的に変更します。これは引用エスケープや一般的な型システムの一部ではありません。
入力が RFC スタイルの出力を無視する場合でも、RFC スタイルの出力を目指す - ToolAcre CSV Cleaner が一貫した区切りと引用を目指してファイルを修復する方法
ソースの方言が異なる場合でも、予測可能な出力を目指します。警告を解析して解決した後、ToolAcre は CRLF レコードと標準の二重引用符エスケープを発行します。検出された区切り文字がセミコロンまたはタブのままの場合、ダウンロードでは常にカンマが強制されるのではなく、その区切り文字が保持されます。
受信コントラクトでカンマ区切りの出力が必要な場合は手動でカンマを選択し、実際に使用されている区切り文字が表示されるのでコントロールを検査します。一貫性は、CSV 拡張機能だけからではなく、明示的な選択と行の形状の見直しによって実現されます。