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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于字符编码的Python和Perl打印的区别相关的知识,希望对你有一定的参考价值。

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

答案

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

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

以上是关于关于字符编码的Python和Perl打印的区别的主要内容,如果未能解决你的问题,请参考以下文章

python和perl基本语法区别

0 python和perl区别

关于Python字符编码encode和decode

在树莓派上的python3

Perl和python命令行参数的区别

如何在 Perl 中显示扩展 ASCII 代码字符?