【问题标题】:How do I read a CSV file containing non-ASCII characters in Perl?如何在 Perl 中读取包含非 ASCII 字符的 CSV 文件?
【发布时间】:2011-04-19 04:39:53
【问题描述】:

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

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

【问题讨论】:

    标签: regex perl csv


    【解决方案1】:

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

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

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

    【讨论】:

    • +1。看,我认为这并不是 Perl 的 csv 解析器的限制。
    【解决方案2】:
    $subject =~ s/[^\x09\x20-\x7E]+//g;
    

    将删除所有这些字符。

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

    【讨论】:

      猜你喜欢
      • 2012-10-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-21
      • 1970-01-01
      • 2012-05-09
      • 2011-02-21
      相关资源
      最近更新 更多