Perl言語を使用している多くの皆さんは、よくこんな問題に直面します。Perlは中国語をサポートしていない? Perlで中国語を入出力すると文字化けが発生します。どうすればいいのでしょうか? 以下で筆者が皆さんにこの問題の解決方法を説明します。

方法/手順

Windows上のActivePerlを例にとります。

私のコードは非常に簡単で、たったの一行です:

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 "你好";

原文アドレス:https://jingyan.baidu.com/article/4f7d5712fd36301a21192744.html