用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')