Как читать текст в формате Unicode UTF-16 в Perl? - PullRequest
2 голосов
/ 15 марта 2012

Команда file сообщает мне:

tmp.txt: Little-endian UTF-16 Unicode text, with CRLF line terminators

cat, head и т. Д. Не может правильно отобразить этот файл.

Ноvim может отображать это правильно.vim говорит мне:

[~/tmp/tmp.txt] [utf-8,dos]
"tmp.txt" [converted][dos]

и :set в vim говорит fileencoding=ucs-2le

Так в Perl:

open FH,'<:encoding(ucs-2le)',$file;
while(<FH>){
    chomp;
    # A start
    print;  
    # Perl: Wide character in print at a.pl line 12, <FH> line 1
    # And display incorrect
    # A end

    # B start
    binmode STDOUT,":utf8";
    print;  
    # display incorrect too
    # B end

}

Как мне прочитать этот файлправильно в Perl?

1 Ответ

4 голосов
/ 10 августа 2012

Я полагаю, что ваша проблема будет решена либо с помощью '<:encoding(UTF-16)', либо '<:encoding(UTF-16LE)'.Я бы попробовал первый первым;это то, что вам нужно, если файл имеет маркер порядка байтов (BOM).Вероятно, есть спецификация, и это то, что запускает ваш сценарий.ucs-2le - более старый формат, похожий, но не тот же.

Для получения дополнительной информации:

Кодировка файла Perl

Кодировка Perl

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