相信很多小伙伴在使用 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