用Python编码对象属性字符串
获取错误:用Python编码对象属性字符串,python,Python,获取错误:'ascii'编解码器无法对位置10中的字符u'\xe9'进行编码:序号不在范围内(128)当我尝试编码apitem变量时 导致问题的行以粗体显示 unordered_groups = connect().get_delivery_groups_for_season(self.division_id, self.id) ordered = DeliveryGroupOrder.objects.filter(season=self.name.get('en'), visibility="
'ascii'编解码器无法对位置10中的字符u'\xe9'进行编码:序号不在范围内(128)
当我尝试编码apitem
变量时
导致问题的行以粗体显示
unordered_groups = connect().get_delivery_groups_for_season(self.division_id, self.id)
ordered = DeliveryGroupOrder.objects.filter(season=self.name.get('en'), visibility="1")
orderedlist = list(ordered.values_list('deliverygroup'))
order_by_name = dict(ordered.values_list('deliverygroup', 'order'))
items = sorted(unordered_groups, key=lambda g: order_by_name.get(g.name.get('en')))
ol = []
for dbitem in orderedlist:
ol.append(dbitem[0])
for apiitem in list(items):
**if apiitem.name.decode('latin-1') not in ol:**
items.remove(apiitem)
apitem
是从API返回的对象apitem.name
包含导致问题的单词(été)。有什么原因我不能这样编码吗?我相信你会得到一个已经编码为utf8的字节字符串
所以你需要
apiitem.name.decode("utf8")
将其转换为unicode
[编辑]
我站在正确的解码是“拉丁1”
使用apitem.name.decode('utf-8')
[编辑]使用
apitem.name.decode('latin-1')
。谢谢Alex。\xe9
是一个e
,在拉丁语-1中带有尖锐的口音,在utf-8中又称ISO-8859-1,而不是。因此,正如两个答案所表明的那样,尝试utf-8仍然是失败的
因此,你需要的是
apiitem.name.decode('latin-1')
(或等效的编解码器名称)要获取Unicode字符串,然后如果愿意,可以使用utf-8或任何其他编解码器对其再次编码
添加:从最新的注释和编辑来看,它开始看起来像
apitem。name
已经是一个unicode对象,在这种情况下,不需要编码也不需要解码,因为它是在unicode对象列表中查找的。(但是,如果它以所报告的ue
开头,则在ol
中找不到它,因为没有以这种方式开头的字符串——尽管是不同的错误:-)。True。亚历克斯·马泰利知道他的事。那么,在这种情况下,您将如何解码?非常感谢,但由于某种原因,我仍然收到相同的错误,它无法编码。请尝试打印repr(apitem)
,然后发布该错误here@natab你需要解码——你有一个字节字符串,用ISO-8859-1或拉丁语-1或类似的编码,所以你绝对不能进一步编码它!相反,您必须首先解码它,获取文本(也称为Unicode对象)。然后,如果你因为其他奇怪的原因不得不这样做,你可以对它进行不同的编码。@JoranBeasley,我认为repr(apitem.name)
比它容器的repr
有用得多,它很可能是'\xe9t\xe9'
。是的,它不一样。。。但同样的。。。其实latin1@AlexMartelli是的,我知道。。。这基本上是对的。。。但是猜测编码错误:P
apiitem.name.decode('latin-1')