虽然题目是个问题,但简短的回答显然是否定的。我试过了。真正的问题是为什么?字符串是一些非ascii字符,如中文,XXX是字符串的当前编码。
>>> u'中文' == '中文'.decode('gbk')
False
//The first one is u'\xd6\xd0\xce\xc4' while the second one u'\u4e2d\u6587'这个例子在上面。我使用的是中文简化的窗口。默认编码是gbk,python也是如此。我得到了两个unicode对象不相等。
更新
a = '中文'.decode('gbk')
>>> a
u'\u4e2d\u6587'
>>> print a
中文
>>> b = u'中文'
>>> print b
ÖÐÎÄ发布于 2014-01-07 14:11:20
是的,如果编解码器成功地解码字节,str.decode()通常返回一个unicode字符串。但是,只有在使用正确的编解码器时,这些值才表示相同的文本。
您的示例文本没有使用正确的编解码器;您的文本是GBK编码的,解码为Latin1:
>>> print u'\u4e2d\u6587'
中文
>>> u'\u4e2d\u6587'.encode('gbk')
'\xd6\xd0\xce\xc4'
>>> u'\u4e2d\u6587'.encode('gbk').decode('latin1')
u'\xd6\xd0\xce\xc4'这些值确实不相等,因为它们是,而不是相同的文本。
同样,重要的是使用正确的编解码器;不同的编解码器会产生非常不同的结果:
>>> print u'\u4e2d\u6587'.encode('gbk').decode('latin1')
ÖÐÎÄ我将示例文本编码为拉丁文-1,而不是GBK或UTF-8。解码可能已经成功,但结果文本是不可读的。
还请注意,粘贴非ASCII字符只适用于,因为Python解释器已正确检测到我的终端编解码器。我可以将浏览器中的文本粘贴到我的终端中,然后终端将文本作为UTF-8编码的数据传递给Python。因为Python已经询问终端使用了什么编解码器,所以它能够从u'....' Unicode文本值中再次解码。在打印encoded.decode('utf8') unicode结果时,Python再次自动对数据进行自动编码,以适应我的终端编码。
要查看检测到了什么编码Python,请打印sys.stdin.encoding
>>> import sys
>>> sys.stdin.encoding
'UTF-8'在处理不同的文本来源时,必须作出类似的决定。例如,从源文件中读取字符串文字要求您要么只使用ASCII (并对其他所有内容使用转义代码),要么在文件顶部为Python提供显式的编解码符号。
我敦促你们读到:
为了更全面地了解Unicode是如何工作的,以及Python如何处理Unicode。
发布于 2014-01-07 14:12:11
按标题假设Python2.7。
答案是否定的。不,因为当您发出string.decode(XXX)时,您将得到一个Unicode,这取决于您作为参数传递的编解码器。
当您使用u'string'时,由shell当前的编码推断编解码器,或者如果它是一个文件,您将得到默认的ascii或脚本开头插入的任何# coding: utf-8特殊注释。
为了进行清理,如果确保编解码器XXX始终与脚本输入( shell或文件)所用的编解码器相同,那么这两种方法的行为基本相同。
希望这能有所帮助!
https://stackoverflow.com/questions/20973745
复制相似问题