如何在Perl中读取包含非ASCII字符的CSV文件?

时间:2010-09-30 06:01:50

标签: regex perl csv

我使用Text :: CSV来解析csv文件。由于某些不良字符,并非所有行都可以被解析 Text :: CSV文档说:

CSV字段中的允许字符包括0x09(制表符)和包含范围0x20(空格)到0x7E(代字号)。
如何尽可能简单地过滤掉任何不允许的字符?

2 个答案:

答案 0 :(得分:9)

您可能希望使用binary标志告诉Text::CSV停止强制执行仅限ASCII的规则,而不是过滤掉“坏”字符:

my $csv = Text::CSV->new ({ binary => 1 });

如果您正在尝试读取非ASCII字符集(例如Latin-1或UTF-8)中的文件,则应查看Text::CSV::Encoded模块。

答案 1 :(得分:0)

$subject =~ s/[^\x09\x20-\x7E]+//g;

将删除所有这些字符。

但这似乎是对CSV文件中允许的内容的一个奇怪的限制。我还没有看到一个无法处理的csv解析器,例如,变音符号和其他非ASCII字符。不过我不知道Perl。