python - 关于python编码的问题

标签 python encoding python-2.x

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

>>>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)

关于python - 关于python编码的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29765897/

相关文章:

java - 导出ASN.1格式,然后用Base64 JAVA编码

python - Django QueryDict 为空 request.POST 但在 request.GET 中填充

javascript - 魔法线导航造成一些麻烦#仅适用于菜单中包含的 href

python - 尝试在 Python 中制作 JSON Schema 验证器以设置默认值

python - Beautiful Soup 和正则表达式

java - LDAP 错误代码 21 - "and ” 之间的差异

python - Python for循环中的多个循环控制变量

linux - 没有设置的CentOS5.5 Linux的编码是什么

python _2or3 模块?

python - 是否可以在不实例化类的情况下导入类方法?