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

问题描述 投票:2回答:1

我在Windows系统上。

我为perl创建了两个用于python的utf-8文件python_print.py和用于perl的perl_print.pl,这两个文件包含相同的行,如下所示

print("中")

和perl有;分隔符。

我的CMD默认在code page 936,我跑

python python_print.py

我有

但是,当我跑

perl perl_print.pl

这是第一次

第二次运行,我得到了

enter image description here

为什么??

我继续测试,我运行chcp 65001将cmd编码更改为utf-8,这次,python和perl都给出了正确的"中"

现在我完全糊涂了,似乎在python和perl中打印是完全不同的。似乎perl总是输出utf8字节?和python打印可以检测CMD代码页打印正确的字节?有人可以解释我的测试结果吗?

python perl cmd character-encoding
1个回答
7
投票

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

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

© www.soinside.com 2019 - 2024. All rights reserved.