>>> # now dumping with ensure_ascii=False, you get a Unicode string
>>> json.dumps(json.loads(test), ensure_ascii=False)
u'{"price": "13,000", "name": "\u58c1\u6bb4\u308a\u4ee3\u884c\u69d8\u5c02\u7528\u2605 \u30c6\u30ec\u30d3\u672c\u4f53 20v\u578b \u767d \u9001\u6599\u8fbc"}'
>>>
将the ^{} module 用于text -> text decoding(在Python 2中这不是严格必需的,但是在Python 3中
str
没有decode
方法,因为这些方法是针对str
->;bytes
和返回,而不是str
->;str
->;str
)。使用unicode_escape
编解码器进行解码将返回正确的数据:因此,要修复你得到的名字,你应该:
^{pr2}$如果问题出在您正在生成的JSON中,您只需要确保
json
模块没有强制字符串使用字符编码;它在默认情况下是这样做的,因为并不是所有的JSON解析器都能处理真正的Unicode字符(它们通常假设数据是以带转义符的ASCII字节发送的)。因此,无论在何处调用json.dump
/json.dumps
(或创建json.JSONEncoder
),请确保显式传递ensure_ascii=False
。在编辑(2016-10-19):
在Scrapy 1.2+中,可以使用^{} 设置为输出JSON文件所需的字符编码,例如
FEED_EXPORT_ENCODING = 'utf-8'
(默认值为None
,这意味着\uXXXX
转义)注意:我正在修改我在问题评论中链接的what I wrote on GitHub for a similar issue。在
请注意,在scray上有一个开放的问题,使输出编码成为一个参数:https://github.com/scrapy/scrapy/issues/1965
Scrapy's default JSON exporter使用(默认)
ensure_ascii=True
参数,因此在写入文件之前,它将Unicode字符作为\uXXXX
序列输出。(这是执行-o somefile.json
时使用的方法)在导出器中设置
ensure_ascii=False
将输出Unicode字符串which will end up as UTF-8 encoded on file。请参阅底部的自定义导出程序代码。在为了说明这一点,让我们将输入的JSON字符串读回一些要处理的数据:
带有
\uXXXX
序列的输入是Python的有效JSON(应该如此),并且loads()
生成一个有效的Pythondict
。在现在让我们再次序列化为JSON:
^{pr2}$现在是
ensure_ascii=False
让我们打印出来看看区别:
如果要将JSON项编写为UTF-8,可以这样做:
1。。定义自定义项导出器,例如在项目中的
exporters.py
文件中2。。替换
settings.py
中的默认JSON项导出器相关问题 更多 >
编程相关推荐