>>b=unicode(a,“gb2312”) >>>a >>>b.。uuu类uuuu #b是unicode >>>a “\xce\xd2” >>>b u'\u6211' >>>c=u“我" >>>c._类__ #c是unicode >>>c u'\xce\xd2',python,unicode,decode,codec,Python,Unicode,Decode,Codec" /> >>b=unicode(a,“gb2312”) >>>a >>>b.。uuu类uuuu #b是unicode >>>a “\xce\xd2” >>>b u'\u6211' >>>c=u“我" >>>c._类__ #c是unicode >>>c u'\xce\xd2',python,unicode,decode,codec,Python,Unicode,Decode,Codec" />

Python中的Unicode和“decode()” >a=”我" # 中国人 >>>b=unicode(a,“gb2312”) >>>a >>>b.。uuu类uuuu #b是unicode >>>a “\xce\xd2” >>>b u'\u6211' >>>c=u“我" >>>c._类__ #c是unicode >>>c u'\xce\xd2'

Python中的Unicode和“decode()” >a=”我" # 中国人 >>>b=unicode(a,“gb2312”) >>>a >>>b.。uuu类uuuu #b是unicode >>>a “\xce\xd2” >>>b u'\u6211' >>>c=u“我" >>>c._类__ #c是unicode >>>c u'\xce\xd2',python,unicode,decode,codec,Python,Unicode,Decode,Codec,b和c都是unicode,但是>>b输出u'\u6211',和>>c输出u'\xce\xd2',为什么?当您输入时我,Python解释器从终端获取本地字符集中该字符的表示形式,由于,它将该字符逐字节存储在字符串中“。在我的UTF-8系统上,这是'\xe6\x88\x91'。在您的计算机上,它是'\xce\xd2',因为您使用的是GB2312。这解释了变量a的值 当您输入u“我",Python解释器不知道是哪个编码我字符位于中。它的作用与普通字符串几乎相同:它将字符的字节存储在Unicode字符串

b
c
都是unicode,但是
>>b
输出
u'\u6211'
,和
>>c
输出
u'\xce\xd2'
,为什么?

当您输入
时我
,Python解释器从终端获取本地字符集中该字符的表示形式,由于
,它将该字符逐字节存储在字符串中“
。在我的UTF-8系统上,这是
'\xe6\x88\x91'
。在您的计算机上,它是
'\xce\xd2'
,因为您使用的是GB2312。这解释了变量
a
的值

当您输入
u“我",Python解释器不知道是哪个编码
字符位于中。它的作用与普通字符串几乎相同:它将字符的字节存储在Unicode字符串中,将每个字节解释为Unicode码点,因此产生错误的结果
u'\xce\xd2'
(或者,在我的框中,
u'\xe6\x88\x91'

这个问题只存在于交互式解释器中。当您编写Python脚本或模块时,您可以在顶部附近找到Unicode字符串。例如,在我的系统中,以下内容会将单词liberté打印两次:


当您仅键入对象的名称时,交互式Python会显示对象的表示形式。另一方面,print命令会尝试呈现字符。名为a的变量是字符串类型。实际上,Python 2.x中的字符串是字节序列。因此,这取决于您的工作环境。您可以对unicode()说函数,您现在使用gb2312编码。如果为真,则b包含给定编码中字符的正确表示形式

设法

#!/usr/bin/env python
# -*- coding: utf-8 -*-

print(u"liberté")
print("liberté")
在您的情况下。您可能会看到想要的结果。请尝试:

>>> print b
表示是(如果可能的话)一个文本字符串,当复制粘贴到源代码时,该字符串将创建具有相同值的对象


请看一下Mark Pilgrim的“深入Python 3”,第4章。字符串()以获得一个清晰易读的解释。

您使用的是什么终端?我无法在我的Unicode gnome终端上重现结果(
c===u'\u6211'
)@ChrisMorgan我在空闲状态下测试这些代码。我也可以用空闲状态重新编写这些代码
>>> print b
>>> print repr(a)
...
>>> print repr(b)