很多小夥伴在使用 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 "你好";