Я думаю, многие друзья часто сталкиваются с этой проблемой при использовании языка Perl: Perl не поддерживает китайский? При вводе или выводе китайского текста в Perl появляются искажённые символы. Что же делать? Ниже я научу друзей, как решить эту проблему.

Метод/Шаги

Возьмём ActivePerl в Windows в качестве примера.

Мой код очень прост, всего одна строка:

print "你好";

Но появились искажённые символы, как показано на рисунке.

Что делать, если мы столкнулись с такой проблемой?

На самом деле это проблема кодировки Perl, и она связана с кодировкой нашей операционной системы.

Мы открываем командную строку cmd и вводим chcp, чтобы получить код типа кодировки.

Видно, что Windows здесь использует кодовую страницу 936 в качестве кодировки по умолчанию.

Тогда мы видим, что кодовая страница 936 соответствует gb2313 (то есть китайской кодировке), а точнее gbk.

Теперь, когда мы знаем, что наша Windows использует кодировку gb2312, нам просто нужно изменить формат кодировки.

Введите следующее в начале кода:

use utf8;
#引入utf8模块 脚本内的字符串使用utf8作为编码格式

binmode(STDOUT,":encoding(gbk)");
#标准输出使用gbk作为编码格式,也可以把gbk改为gb2312

binmode(STDIN,":encoding(gbk)");
#如果涉及到输入流,例如读文件,不加这条读中文文件会出现乱码


binmode(STDERR,":encoding(gbk)");
#如果异常错误中的字符串有中文,请加上STDERR,否则也会出现乱码

print "你好";

Сможет ли теперь китайский текст выводиться нормально?

На что стоит обратить внимание: если код включает чтение китайских файлов, обязательно добавьтеДобавьте binmode(STDIN,":encoding(gbk)");。

Есть еще один метод: для STDIN, STDOUT, STDERR (то есть стандартного ввода, стандартного вывода и стандартного потока ошибок), все используют определенную кодировку в качестве формата кодирования.

Все та же простая маленькая программа, использующая print для вывода китайской строки.

Код выглядит следующим образом:

use utf8;

use open ":encoding(gbk)",":std";
#标准输入、输出、错误皆用gbk编码格式进行编码

print "你好";

Исходный URL: https://jingyan.baidu.com/article/4f7d5712fd36301a21192744.html