>> '\xc3\xa7\xc3\xb6' b.decode('utf-8') == a['a'] >>> False 里面有什么? e-6ren">
gpt4 book ai didi

Python UTF-8 比较

转载 作者:IT老高 更新时间:2023-10-28 21:07:42 25 4
gpt4 key购买 nike

a = {"a":"çö"}
b = "çö"
a['a']
>>> '\xc3\xa7\xc3\xb6'

b.decode('utf-8') == a['a']
>>> False

里面有什么?

edit= 对不起,这是我的错误。它仍然是错误的。我在 Ubuntu 10.04 上使用 Python 2.6。

最佳答案

可能的解决方案

要么这样写:

a = {"a": u"çö"}
b = "çö"
b.decode('utf-8') == a['a']

或者这样(也可以跳过两边的.decode('utf-8')):

a = {"a": "çö"}
b = "çö"
b.decode('utf-8') == a['a'].decode('utf-8')

或者像这样(我的建议):

a = {"a": u"çö"}
b = u"çö"
b == a['a']

说明

根据 Tim 的评论更新。在您的原始代码中,b.decode('utf-8') == u'çö'a[ 'a'] == 'çö',所以您实际上是在进行以下比较:

u'çö' == 'çö'

其中一个对象是unicode类型,另一个是str类型,所以为了执行比较,str转换为 unicode 然后比较两个 unicode 对象。它适用于纯 ASCII 字符串,例如:u'a' == 'a',因为 unicode('a') == u'a'.

但是,在 u'çö' == 'çö' 的情况下它会失败,因为 unicode('çö') 返回以下错误:UnicodeDecodeError : 'ascii' 编解码器无法解码位置 0 中的字节 0xc3:序数不在范围内 (128),因此整个比较返回 False 并发出以下警告:UnicodeWarning: Unicode equal comparison failed to将两个参数都转换为 Unicode - 将它们解释为不相等

关于Python UTF-8 比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3400171/

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