Text :: CSV支持的编码

时间:2019-05-10 18:01:31

标签: csv perl6

在哪里可以找到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

2 个答案:

答案 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-8utf-16