【发布时间】:2011-04-19 04:39:53
【问题描述】:
我正在使用 Text::CSV 来解析 csv 文件。由于某些错误字符,并非所有行都可以解析。
Text::CSV 文档说:
CSV 字段中允许的字符包括 0x09(制表符)和 0x20(空格)到 0x7E(波浪号)的范围。如何尽可能简单地过滤掉任何不允许的字符?
【问题讨论】:
我正在使用 Text::CSV 来解析 csv 文件。由于某些错误字符,并非所有行都可以解析。
Text::CSV 文档说:
CSV 字段中允许的字符包括 0x09(制表符)和 0x20(空格)到 0x7E(波浪号)的范围。如何尽可能简单地过滤掉任何不允许的字符?
【问题讨论】:
您可能希望使用binary 标志告诉Text::CSV 停止执行其仅ASCII 规则,而不是过滤掉“坏”字符:
my $csv = Text::CSV->new ({ binary => 1 });
如果您尝试读取非 ASCII 字符集(例如 Latin-1 或 UTF-8)的文件,您应该查看 Text::CSV::Encoded 模块。
【讨论】:
$subject =~ s/[^\x09\x20-\x7E]+//g;
将删除所有这些字符。
但这似乎是对 CSV 文件中允许的内容的奇怪限制。我还没有看到无法处理例如变音符号和其他非 ASCII 字符的 csv 解析器。不过,我不知道 Perl。
【讨论】: