如何Parse CSV Files
正确解析 CSV files, handling quoted fields, embedded commas, 和 multiline values.
问题
你的 CSV parser breaks 开 fields 该包含 commas, quotes, 或 newlines 内部 quoted values.
前置条件
- Understanding 的 CSV 格式化
- Knowledge 的 RFC 4180 quoting rules
步骤
-
1. Understand RFC 4180 rules
Fields containing commas, double quotes, or newlines must be enclosed in double quotes. Quotes inside quoted fields are escaped by doubling them (""). A proper parser follows these rules rather than simply splitting on commas.
输入"Smith, John",30输出one field: 'Smith, John' -
2. Use a standards-compliant parser
Use a CSV parser that implements RFC 4180 rather than a naive string split. The parser should handle quoted fields, escaped quotes, and multiline values. Specify the delimiter, quote character, and encoding explicitly.
输入CSV with quoted fields输出correctly parsed rows -
3. Handle edge cases
Account for BOM at the start of the file, different line endings (CRLF vs LF), empty fields, and trailing delimiters. Decide on a policy for rows with inconsistent field counts. These edge cases are common in real-world CSV files.
输入BOM + CRLF + empty fields输出handled gracefully
预期结果
正确 parsed CSV 数据 where quoted fields, embedded delimiters, 和 multiline values 是 handled properly.
常见错误
- Naive split on comma breaks quoted fields
- Never use a simple string.split(','). Use a proper CSV parser that respects quoting rules.
- BOM appears as a hidden character in the first field
- Detect and strip the UTF-8 BOM (EF BB BF) before parsing, or use a parser that handles it automatically.
排障指引
- If rows are misaligned, check for unquoted fields containing commas or inconsistent line endings.
- For very large files, use a streaming CSV parser to process rows one at a time.
安全限制
- CSV injection: cells starting with =, +, -, or @ can execute formulas in spreadsheet apps. Sanitize if output will be opened in Excel.