UnicodeDecodeError:“ascii”编解码器。。。当尝试为JavaScript编码结构时

UnicodeDecodeError:“ascii”编解码器。。。当尝试为JavaScript编码结构时,javascript,python,python-2.7,python-unicode,Javascript,Python,Python 2.7,Python Unicode,我试图从python结构中创建一个unicode字符串。我不想使用python的默认字符串转换方法,因为我希望这个unicode字符串处于特定的结构中,以便可以在javascript客户端中使用它。我在电话线上听到了独角兽的声音 dlist_str += unicode(item[key]) 我试过了 # -*- encoding: utf-8 -*- 在文件的顶部。我也试过使用问题行 dlist_str += item[key] 希望str类型将自动转换为unicode。我做错了什么 以

我试图从python结构中创建一个unicode字符串。我不想使用python的默认字符串转换方法,因为我希望这个unicode字符串处于特定的结构中,以便可以在javascript客户端中使用它。我在电话线上听到了独角兽的声音

dlist_str += unicode(item[key])
我试过了

# -*- encoding: utf-8 -*-
在文件的顶部。我也试过使用问题行

dlist_str += item[key]
希望str类型将自动转换为unicode。我做错了什么

以下是代码片段:


看起来您试图同时做两件事:将列表转换为字典,并对其进行JSON编码

如果将这两个步骤分开,您应该能够使用:

另外,您在版本中看到错误的原因是您需要显式地从编码中选择一个值,而不是让Python猜测。比如:

dlist_str += item[key].decode('utf-8')

可能会起作用。

-*-编码:utf-8-*-用于允许vim/emacs仅考虑utf-8编码来读取代码。请发布确切的输出,以及对函数convertToString的调用,这样我们就可以很好地解决您的问题。simpsons@Rubens:不正确。-*-encoding:utf-8-*-的特定格式是对emacs的一个提示,Vim将使用modeline,例如Vim:fileencoding=utf-8,但是Python使用了coding:utf-8部分来指示文件是utf-8而不是ASCII;如果将不在ASCII范围内的Unicode字符(例如λ)放入文件中,如果没有编码:utf-8,则会导致语法错误,但如果有,则会正常工作。看见但是请记住,这只是源代码。@ChrisMorgan是的,vim/emacs之间有一点差异,但是在脚本中添加这样的内容只涉及代码,而不涉及代码处理的数据。strtypex==?请不要。使用typex==str精确类型匹配或isinstancex,允许使用str子类。为了一次涵盖str和unicode,您需要isinstancex,basestring。@鲁本斯:我的观点很简单,它也会影响Python的行为,尽管不是以希望的方式。您的json.dumps解决方案非常优雅。谢谢
import json

def convertToString(dlist):
    temp_dict = dict((item['field_id'], item) for item in dlist)
    return json.dumps(temp_dict)
    # or, even shorter, and in Python 2.7/3.2+
    # return json.dumps({item['field_id']: item for item in dlist})
dlist_str += item[key].decode('utf-8')