知識マップ: CSVは「ただのテキスト」ではない ── C#業務アプリのCSV実務(文字コード・Excel互換・インジェクション対策)

記事「CSVは「ただのテキスト」ではない ── C#業務アプリのCSV実務(文字コード・Excel互換・インジェクション対策)」の主張を、概念と関係(エッジ)に分解した知識グラフの全体です。各関係には根拠・確認日・確度が付いています。

この記事は業務アプリでのCSV入出力を、事実上の標準であるRFC 4180を軸に整理します。String.Splitによる自作パースはフィールド内のカンマや改行を処理できないため推奨されず、.NET標準のTextFieldParserやライブラリのCsvHelperがその代替として位置づけられます。文字コードはBOM付きUTF-8がExcelでの文字化けを防ぐ一方、システム間連携ではBOMなしUTF-8が使われ、.NET(Core)でShift_JISを扱うにはCodePagesEncodingProviderの登録が前提になります。ExcelはCSVの値を数値や日付として解釈するため先頭ゼロ落ちや日付化が起き、これを避けたい場合はxlsx出力が有効です。ユーザー入力を出力するアプリでは、数式解釈を悪用するCSVインジェクションへの対策として先頭文字の無害化が必要になります。

CSVファイル処理の知識マップCSVがRFC 4180を前提とすること、Split自作パースが非推奨でTextFieldParserやCsvHelperが代替になること、BOMの有無がExcelでの文字化けとCSVインジェクション対策・xlsx出力の使い分けに関わることを示す図前提とする用いるのは非推奨実装を担う推奨される対応推奨される対応実装を担うの後継原因になり得る防止する推奨される対応原因になり得る軽減する前提とする前提とするに保存される推奨される対応用いるのは非推奨原因になり得る防止するで構成できる推奨される対応推奨される対応利用する利用するCSV(カンマ区切り値)TextFieldParserRFC 4180String.Split(',')による自作CSVパースCsvHelperExcelExcelによるCSV値の解釈(先頭ゼロ落ち・日付化・指数表記)xlsx出力CSVインジェクション数式先頭文字の無害化(CSVインジェクション対策)Shift_JISCodePagesEncodingProvider.NET(Core以降)BOM(Byte Order Mark)BOM付きUTF-8BOMなしUTF-8CSVの文字化けUTF8EncodingクラスCSVのストリーミング読み込みCultureInfo.InvariantCulture

概念間の関係(全24件)

図と同じ関係を文章でも列挙します。表示している文と機械可読な意味データ(RDFa)は同じ要素に載っています。確度が「確立した関係」のものは直接の関係として、「条件付きの関係」のものは成立条件つきの言明(rdf:Statement)として表現しています。

主要概念の定義

CSV(カンマ区切り値)
カンマで区切ったテキストでデータを表す、業務アプリのシステム間連携で今も広く使われるファイル形式。
TextFieldParser
引用符で囲まれたフィールドを正しく処理し、壊れた行をMalformedLineExceptionとして検出できる、.NET標準の区切り形式テキストパーサー。
String.Split(',')による自作CSVパース
カンマで文字列を分割するだけの自作CSV読み込み方式。フィールド内のカンマ・改行・引用符を処理できず仕様上壊れる。
CsvHelper
RFC 4180準拠を掲げ、クラスへのマッピングや遅延読み込みに対応する.NET向けの代表的なCSV読み書きライブラリ。
Excel
ワークシートの読み書きや自動操作の対象になる、Microsoftの表計算ソフトウェア。CSVファイルを開くと値を数値・日付として解釈する。
xlsx出力
セルの書式を出力側で制御できる、xlsx形式でのファイル出力。CSVの値解釈問題を根本的に回避できる。
数式先頭文字の無害化(CSVインジェクション対策)
数式として解釈されうる先頭文字を持つフィールドの先頭にシングルクォートを付けるなどして、CSVインジェクションを無害化する対策。
Shift_JIS
レガシーシステムとの連携で今も使われる日本語の文字コード(コードページ932)。
.NET(Core以降)
.NET Frameworkの後継となる、クロスプラットフォーム対応の.NETランタイム(.NET 5以降)。
BOM(Byte Order Mark)
ファイル先頭に置かれ、どのUnicodeエンコーディングかを示す数バイトの目印。UTF-8はEF BB BF、UTF-16 LEはFF FE、UTF-16 BEはFE FF。
BOM付きUTF-8
ファイル先頭にBOMを付けたUTF-8。Excelでダブルクリックして開いても文字コードを正しく認識される。
BOMなしUTF-8
BOMを付けないUTF-8。システム間連携ではこちらが使われるが、Excelでのダブルクリックでの自動判別は環境によって成功が保証されない。
CultureInfo.InvariantCulture
OSの地域設定(カルチャ)に依存しない数値・日付の書式変換に使う.NETのカルチャ。CSV出力での区切り文字との衝突回避だけでなく、和暦混入の防止やログ出力の検索性維持など、境界を越える日付・数値の文字列表現を固定したい場面で広く使われる。

機械可読データ

このページはサイトの知識グラフ(_data/knowledge/)から自動生成されています。誤りの指摘はお問い合わせからお願いします。