关于字符编码的Python和Perl打印的区别

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代码页打印正确的字节?有人可以解释我的测试结果吗?

yst*_*sth 7

perl正在打印源文件中的文字字节.除非您明确声明源文件是utf8,否则它会将字符串视为"\ xe4\xb8\xad" use utf8;.

一旦你这样做,你会(如果你启用警告)得到Wide character in print警告; perl要求您指定输出非ASCII字符时要使用的编码.您可以使用use open ':std' => ':encoding(cp936)';或使用binmode STDOUT, ':encoding(cp936)';或(对于某些文件句柄,您正在打开)使用第3个参数来执行此操作open.