Разница в печати на Python и Perl относительно кодировки символов - PullRequest
0 голосов
/ 14 января 2019

Я в системе Windows.

Я создал два файла utf-8 python_print.py для python и perl_print.pl для perl соответственно, два файла содержат одну и ту же строку, как показано ниже

print("中")

и perl имеет ; разделитель.

Моя CMD по умолчанию code page 936, и я запускаю

python python_print.py

Я получил

Однако, когда я запускаю

perl perl_print.pl

впервые даёт

запустив его во второй раз, я получил

enter image description here

почему ??

Я продолжаю тестирование, я запускаю chcp 65001, чтобы изменить кодировку cmd на utf-8, и на этот раз Python и Perl дают правильные "中".

Теперь я полностью запутался, кажется, что печать в python и perl совершенно различна. Кажется, Perl всегда распечатывает utf8 байтов? и python print может обнаружить кодовую страницу CMD для печати правильного байта? Кто-нибудь может объяснить мой результат теста?

1 Ответ

0 голосов
/ 14 января 2019

perl печатает байты, которые есть в вашем исходном файле. Он видит строку как "\ xe4 \ xb8 \ xad", если вы явно не объявите, что ваш исходный файл - utf8 с use utf8;.

Как только вы это сделаете, вы бы (если вы включили предупреждения, как следует) получили бы предупреждение Wide character in print; Perl требует, чтобы вы указали кодировку, которая будет использоваться при выводе не-ASCII символов. Вы можете сделать это с помощью use open ':std' => ':encoding(cp936)'; или binmode STDOUT, ':encoding(cp936)'; или (для некоторого файлового дескриптора, который вы открываете) с 3-м аргументом open.

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