2013-03-05 60 views
3

我的Perl腳本有問題。在類UNIX系統中,它將所有Unicode字符(如ä)正確輸出到控制檯。在Windows命令行中,字符被分解爲無意義的字形。有沒有簡單的方法來避免這種情況?我正在使用use utf8;Windows上的Perl:編碼問題

在此先感謝。

+0

你檢查從這個問題的答案:http://stackoverflow.com/questions/627661/how-can-i-output-utf-8-from-perl – 2013-03-05 13:00:03

+0

另一個問題考慮在Windows控制檯顯示unicode:http://stackoverflow.com/questions/388490/unicode-characters-in-windows-command-line-how – 2013-03-05 13:01:58

+0

討厭恨討厭這個'utf8'在可愛的'Perl' – gaussblurinc 2013-03-05 14:29:25

回答

11

use utf8;只是告訴Perl你的源碼是使用UTF-8編碼的。

它也不適用於unix。有些字符串不能正確打印(print chr(0xE9);),而且大多數字符串會打印「寬字符」警告(print chr(0x2660);)。您需要解碼輸入並對輸出進行編碼。

在UNIX系統中,這是usuaully

use open ':std', ':encoding(UTF-8)'; 

在Windows系統中,你需要使用chcp找到控制檯的角色頁面。 (437我)

use open ':std', ':encoding(cp437)'; # Encoding used by console 
use open IO => ':encoding(cp1252)'; # Encoding used by files 
+0

在Windows 7 cmd.exe中嘗試了這一點,它只會產生錯誤。 'C:/strawberry/perl/lib/encoding.pm第120行哈希賦值中元素奇數。encoding:C:\ Users \ Peter \ perl \ foo.pl第9行的未知編碼':std'同樣的':encoding ...'和'IO => ..')。我最終得到的工作是將cmd.exe字體更改爲Lucida控制檯,chcp 1252,然後在腳本中使用'use encoding'cp1252';'。 – TLP 2013-03-05 13:52:09

+0

@TLP,已修復。應該是「開放」而不是「編碼」。切勿使用編碼。 – ikegami 2013-03-05 13:56:12

+1

+1正常。哇,打印字符太麻煩了。 – TLP 2013-03-05 14:13:21