Perl 輸出中文亂碼問題解決方法

很多小夥伴在使用 Perl 語言的時候,經常會遇到這樣一個問題,Perl 不支持中文?perl 輸入或者輸出中文會出現亂碼。這時怎麼辦呢?

Perl 輸出中文亂碼問題解決方法Perl 輸出中文亂碼問題解決方法

方法/步驟

就以 windows 上的 ActivePerl 爲例。

代碼特別簡單,就是一句:

print "你好";

卻出現了亂碼,如圖。
Perl 輸出中文亂碼問題解決方法Perl 輸出中文亂碼問題解決方法

遇到這樣的問題,我們要怎麼辦?

其實就是 perl 編碼的問題,這其實和我們操作系統的編碼有關。

我們打開 cmd 命令提示符,輸入 chcp 獲得編碼類型代碼。

可見,這裏的 windows 是代號 936 爲默認編碼格式。
Perl 輸出中文亂碼問題解決方法Perl 輸出中文亂碼問題解決方法

然後我們可以看到,936 代碼頁對應的是 gb2313(即中文),或者說是 gbk。
Perl 輸出中文亂碼問題解決方法Perl 輸出中文亂碼問題解決方法

我們知道了我們 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)");。
Perl 輸出中文亂碼問題解決方法Perl 輸出中文亂碼問題解決方法
Perl 輸出中文亂碼問題解決方法Perl 輸出中文亂碼問題解決方法

還有一種方法,針對我們 STDIN、STDOUT、STDERR(即標準輸入、標準輸出和標準錯誤)統統使用某種編碼作爲編碼格式。

還是那個簡單的小程序,print 輸出一箇中文。

代碼如下:

use utf8;
use open ":encoding(gbk)",":std";
#標準輸入、輸出、錯誤皆用gbk編碼格式進行編碼
print "你好";

Perl 輸出中文亂碼問題解決方法Perl 輸出中文亂碼問題解決方法
Perl 輸出中文亂碼問題解決方法Perl 輸出中文亂碼問題解決方法

本文地址:https://www.linuxprobe.com/perl-output-chinese.html