2011-07-02 64 views
2

這是我的測試代碼: 我使用的是win32草莓perl。utf8 :: all - 如何強制<STDIN/OUT>轉換爲big-5

use utf8::all; my $input = ;

當鑰匙在中國性格,

它顯示了錯誤:

utf8 "\xAD" does not map to unicode ..... 

我還寫有UTF8腳本::所有打印中國字符,不能成功。 如果只使用utf8或不使用utf8,我可以通過編碼來打印中文字符。

如何設置爲其他編碼?

回答

1

有一種解決方法可將Windows命令提示符的代碼頁設置爲UTF-8,但它不是可部署的解決方案。

我的建議是不要打擾,只需在Perl中使用Big5(並且堅持使用CP950/zh-tw Windows),或者使用文本文件I/O進行輸入/輸出。

或者,冒險,使用cgywin中的bash/perl,而不是使用UTF-8。

6

How to set the to other encoding?

utf8::all,你不能。編碼UTF-8在其中的任何地方都是硬編碼的。畢竟,該模塊被命名爲utf8::all而不是big5::all

您必須對進行解碼/編碼明確,請參閱http://p3rl.org/UNI。你說你在Windows上,所以使用編碼cp950

use Encode qw(decode encode); 

my @arguments_as_characters = decode 'cp950', @ARGV; 
open my $file_handle, '<:encoding(cp950)', $file_name; 
print encode 'cp950', $data_to_stdout; 


How to open STDIN, STDOUT in cp950?

當你運行你的程序,標準流已經打開!您可以使用binmode修改I/O layer

binmode STDOUT, ':encoding(cp950)'; 
+0

如何CP950開STDIN,STDOUT? – Weiyan

0
use open IO => ':encoding(big5)'; 

use open IO => ':encoding(cp950)'; 

use open IO => ':locale';