Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Text::CSV supported encodings

Tags:

csv

raku

Where can I find the encodings supported by Text::CSV? Is "latin1" not supported or is the syntax wrong?

This does fail:

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
like image 936
LuVa Avatar asked May 10 '19 18:05

LuVa


2 Answers

There was an error in the code: the encoding declared was not actually used when opening the file. I created an issue in the module, and this pull request to fix it

like image 96
jjmerelo Avatar answered Nov 20 '22 16:11

jjmerelo


It looks like the documentation for Text::CSV requires that the value passed to encoding must be the same as that accepted by the open function's encoding parameter.

The list of possible values is listed in the IO::Handle::encoding method documentation:

The accepted values for encoding are case-insensitive. The available encodings vary by implementation and backend. On Rakudo MoarVM the following are supported:

  • utf8
  • utf16
  • utf16le
  • utf16be
  • utf8-c8
  • iso-8859-1
  • windows-1251
  • windows-1252
  • windows-932
  • ascii

The default encoding is utf8, which undergoes normalization into Unicode NFC (normalization form canonical). In some cases you may want to ensure no normalization is done; for this you can use utf8-c8. Before using utf8-c8 please read Unicode: Filehandles and I/O for more information on utf8-c8 and NFC.

As of Rakudo 2018.04 windows-932 is also supported which is a variant of ShiftJIS.

Implementation may choose to also provide support for aliases, e.g. Rakudo allows aliases latin-1 for iso-8859-1 encoding and dashed utf versions: utf-8 and utf-16.

like image 5
callyalater Avatar answered Nov 20 '22 17:11

callyalater