Как мне прочитать файл CSV, содержащий не-ASCII символы в Perl? - PullRequest
2 голосов
/ 30 сентября 2010

Я использую Text :: CSV для разбора файла CSV.Не все строки могут быть проанализированы из-за некоторых плохих символов.
Документация Text :: CSV гласит:

Допустимые символы в поле CSV включают 0x09 (табуляция) и включающий диапазон от 0x20 (пробел) до 0x7E (тильда).
Как я могу максимально легко отфильтровать любые недопустимые символы?

Ответы [ 2 ]

9 голосов
/ 30 сентября 2010

Вместо того, чтобы отфильтровывать «плохие» символы, вы, вероятно, захотите использовать флаг binary, чтобы сообщить Text :: CSV о прекращении применения своего правила только для ASCII:

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

Если вы пытаетесь прочитать файл в кодировке, отличной от ASCII (например, Latin-1 или UTF-8), вам следует обратиться к модулю Text :: CSV :: Encoded .

0 голосов
/ 30 сентября 2010
$subject =~ s/[^\x09\x20-\x7E]+//g;

удалит все эти символы.

Но это кажется странным ограничением на то, что разрешено в CSV-файле. Я еще не видел парсера csv, который не мог бы обрабатывать, например, умляуты и другие символы не ASCII Впрочем, я не знаю Perl.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...