我提取了一些类似这样的JSON数据:
{
"string":"• Christmas 2014 •",
"layer_id":490,
"other": "attributes",
"that_dont": "matter"
}
此JSON正在其他地方生成,我通过http请求(使用json.loads(request.text)
)将其拉入。
当我在控制台中打印字符串时,我得到:
⢠Christmas 2014
(如果我尝试str())则会出现例外情况.UnicodeDecodeError错误
我在PDF上打印字符串,需要字符串:
"\u00B7 Christmas 2014 \u00B7"
我的直觉有点笨拙,我只是想用正确的unicode点取代一系列奇怪的角色,但我甚至不知道我想替换它是什么。
答案 0 :(得分:1)
不要使用response.text
;你在这里造成Mojibake。如果在响应中未指定字符集,则response.text
可能最终使用错误的编解码器。
改为使用response.json()
,让它为您的JSON处理正确的编解码器。
如果仍然看到相同的结果,那么源使用cp1252解码UTF-8数据,您需要恢复该过程:
corrected = broken.encode('cp1252').decode('utf8')
修复了您的具体问题:
>>> print u"• Christmas 2014 •".encode('cp1252').decode('utf8')
• Christmas 2014 •
这些是U+2022 BULLET个字符。
你也可以使用ftfy
library,它可以自动处理Mojibake解缠:
>>> import ftfy
>>> print ftfy.fix_text(u"• Christmas 2014 •")
• Christmas 2014 •