在哪里可以找到Text :: CSV支持的编码?是不支持“ latin1”还是语法错误?
这确实失败:
use Text::CSV;
spurt '/tmp/test.csv', 'ID;Gerät;Nr', :enc<latin1>;
slurp '/tmp/test.csv', :enc<latin1>; #ok
say csv :in</tmp/test.csv>, :encoding<latin1>, :sep_char<;>;
#Malformed UTF-8 error
答案 0 :(得分:7)
代码中有错误:打开文件时,实际上并未使用声明的编码。我在模块中创建了一个问题,然后this pull request to fix it
答案 1 :(得分:5)
Text::CSV
的文档似乎要求the value passed to encoding
must be the same as that accepted by the open
function's encoding
parameter。
可能的值列表在IO::Handle::encoding
method documentation中列出:
可接受的编码值不区分大小写。可用的编码因实现和后端而异。在Rakudo MoarVM上,支持以下功能:
utf8
utf16
utf16le
utf16be
utf8-c8
iso-8859-1
windows-1251
windows-1252
windows-932
ascii
默认编码为
utf8
,它会进行规范化为Unicode NFC(规范化规范形式)。在某些情况下,您可能要确保不执行任何标准化操作。为此,您可以使用utf8-c8
。在使用utf8-c8
之前,请阅读Unicode:文件句柄和I / O,以获取有关utf8-c8
和NFC的更多信息。自Rakudo 2018.04起,还支持
windows-932
,它是ShiftJIS的一种变体。实施可以选择也为别名提供支持,例如Rakudo允许别名
latin-1
用于iso-8859-1
编码和破折的utf版本:utf-8
和utf-16
。