我正在使用Perl的Text::CSV_XS
包读取一个文件,我正在Ubuntu上读取该包:
open my $fh, '<:encoding(utf8)', 'file.csv' or die "Can't read csv: $!"; # error shows on this line
while (my $row = $list->getline ($fh)) {
....
}
这读起来很好,直到有一行出现错误:
UTF-8 "xE9" does not map to Unicode at 0.xlsx_to_json.pl line 198, <$_[...]> line 14019.
从网上看,这表明这是一个ê字符或类似的东西,这很奇怪,因为我在14109行上没有看到任何这样的字符,那行看起来和其他行一样。
我试着把空线改成
打开我的$fh,'<','file.csv’
但这给出了相同的错误。
我尝试打开CSV并用不同的分隔符保存为CSV,但我在Excel 2016中无法再这样做了,更改分隔符的选项根本不会出现
我尝试在LibreOffice中打开以保存为CSV,但更新删除了更改分隔符的功能
如果没有这个奇怪的错误,我如何读取这个CSV文件?
您的文件不是有效的UTF-8文件。字节E9出现在不期望出现的地方。
后面跟着两个连续字节=正常
$ perl -M5.010 -MEncode=decode -e'
decode("UTF-8", "xE9xBFxBF", Encode::FB_WARN | Encode::LEAVE_SRC);
say "done";
'
done
后面没有两个连续字节=错误
$ perl -M5.010 -MEncode=decode -e'
decode("UTF-8", "xE9x41", Encode::FB_WARN | Encode::LEAVE_SRC);
say "done";
'
UTF-8 "xE9" does not map to Unicode at -e line 2.
done
修复你的坏数据。