Skip to main content
 首页 » 编程设计

python之关于python编码的问题

2025年05月04日15xxx_UU

首先,我在命令行中测试默认编码,

>>>import sys 
>>>print sys.getdefaultencoding() 
'ascii' 

然后,我给一个变量赋了一个汉字,

>>>s="汉" 
>>>print s 
汉 

那么,我的问题是为什么ascii可以显示汉字?

请您参考如下方法:

默认编码在这里不适用;它仅在 Unicode 和 bytestring 值之间隐式转换时使用。

您在终端中创建了一个字节串。您的终端对字符进行编码,然后存储字节。打印字节会导致终端再次解码字节。

例如,如果您的终端配置为使用 UTF-8,您将在回显 s 时看到:

>>> s = "汉" 
>>> s 
'\xe6\xb1\x89' 

那些是 3 个 UTF-8 字节,将它们打印回终端会产生终端知道如何再次解码的数据:

>>> print s 
汉 

请注意,在终端环境中,交互式提示使用它检测到的终端编码来解码创建 Unicode 对象时的输入:

>>> import sys 
>>> sys.stdin.encoding 
'UTF-8' 
>>> unicode_string = u"汉" 
>>> unicode_string 
u'\u6c49' 
>>> print unicode_string 
汉 

打印会自动再次对 Unicode 对象进行编码以匹配终端编码。这与 .py 文件中的 Python 源代码中的字符串文字形成对比,您必须使用 PEP 263 header 声明文件编解码器。 .

最后但同样重要的是,sys.getdefaultencoding() 用于隐式转换;将字节字符串与 Unicode 值连接时,例如:

>>> unicode_string + s 
Traceback (most recent call last): 
  File "<stdin>", line 1, in <module> 
UnicodeDecodeError: 'ascii' codec can't decode byte 0xe6 in position 0: ordinal not in range(128)