use*_*964 2 python perl cmd character-encoding
我在Windows系统上.
我分别python_print.py为python和perl_print.plperl 创建了两个utf-8文件,这两个文件包含如下相同的行
print("?")
Run Code Online (Sandbox Code Playgroud)
和perl有;分隔符.
我的CMD code page 936默认处于启用状态,然后运行
python python_print.py
Run Code Online (Sandbox Code Playgroud)
我有
?
Run Code Online (Sandbox Code Playgroud)
但是,当我跑
perl perl_print.pl
Run Code Online (Sandbox Code Playgroud)
这是第一次
?
Run Code Online (Sandbox Code Playgroud)
第二次运行,我得到了
为什么??
我继续测试,我运行chcp 65001将cmd编码更改为utf-8,这次,python和perl都给出正确的"?".
现在我完全糊涂了,似乎在python和perl中打印是完全不同的.似乎perl总是输出utf8字节?和python打印可以检测CMD代码页打印正确的字节?有人可以解释我的测试结果吗?
perl正在打印源文件中的文字字节.除非您明确声明源文件是utf8,否则它会将字符串视为"\ xe4\xb8\xad" use utf8;.
一旦你这样做,你会(如果你启用警告)得到Wide character in print警告; perl要求您指定输出非ASCII字符时要使用的编码.您可以使用use open ':std' => ':encoding(cp936)';或使用binmode STDOUT, ':encoding(cp936)';或(对于某些文件句柄,您正在打开)使用第3个参数来执行此操作open.