gpt4 book ai didi

python - u'string'是否与 'string' .decode ('XXX' 相同)

转载 作者:太空狗 更新时间:2023-10-29 22:22:41 25 4
gpt4 key购买 nike

虽然标题是一个问题,但简短的回答显然是否定的。我已经在 shell 中尝试过了。真正的问题是为什么?ps:string是一些非ascii字符,比如中文,XXX是string的当前编码

>>> u'中文' == '中文'.decode('gbk')
False
//The first one is u'\xd6\xd0\xce\xc4' while the second one u'\u4e2d\u6587'

例子如上。我正在使用 windows 中文 simplyfied。默认编码是gbk,python shell也是。我得到了两个不相等的 unicode 对象。

更新

a = '中文'.decode('gbk')
>>> a
u'\u4e2d\u6587'
>>> print a
中文

>>> b = u'中文'
>>> print b
ÖÐÎÄ

最佳答案

是的,如果编解码器成功解码字节,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')
ÖÐÎÄ

我将示例文本编码为 Latin-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。

关于python - u'string'是否与 'string' .decode ('XXX' 相同),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20973745/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com