utf8 :: all - 如何强制<stdin out =“”>到big-5 </stdin>

时间:2011-07-02 15:39:47

标签: perl utf-8

这是我的测试代码: 我正在使用win32草莓perl。

  

使用utf8 :: all;我的$ input =;

当键入中文字符时,

显示错误:

utf8 "\xAD" does not map to unicode .....
我也用utf8编写了一个脚本:: all来打印汉字,不能成功。 如果只使用utf8或没有utf8,我可以通过编码来打印中文字符。

如何设置其他编码?

3 个答案:

答案 0 :(得分:6)

  

如何设置其他编码?

使用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;


  

如何在cp950中打开STDIN,STDOUT?

运行程序时,标准流 已经打开!您可以使用I/O layer修改binmode

binmode STDOUT, ':encoding(cp950)';

答案 1 :(得分:1)

有一种解决方法可将Windows命令提示符的代码页设置为UTF-8,但它不是可部署的解决方案。

我的建议是不要打扰,只需在Perl中使用Big5(并坚持使用CP950 / zh-tw Windows),或使用文本文件I / O进行输入/输出。

或者,要冒险,请在cgywin中使用bash / perl,而不是使用UTF-8开箱即用。

答案 2 :(得分:0)

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

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

use open IO => ':locale';