我从api返回一个带有字符“ \ u0083”,“ \ u0087d”和“ \ u008d”的json。我将编码更改为utf-8和ISO-8859-1,但未成功,请以防万一,因为我使用的api不会更改。
更改请求标头编码,但未成功
示例:
''' “ prop”:“SÃ\ u0083OLUÃ\ u008dS”, “ prop”:“ RUA LUIZGUIMARÃ\ u0083ES”, “ prop”:“POÃ\ u0087O DA PANELA”
'''
答案 0 :(得分:1)
您将UTF-8字节解码为ISO-8859-1。
编码为UTF-8的'SÃOLUÍS'产生以下字节(符号为Python,但原理适用于任何语言)
b'S\xc3\x83O LU\xc3\x8dS'
解码为ISO-8859-1会产生以下字符串:
'SÃ\x83O LUÃ\x8dS'
UTF-8是多字节编码,但是ISO-8859-1是单字节编码。在这种情况下,UTF-8编码的“Ô和“Í”的首个字节是\xc3
,这是“Ô的ISO-8859-1编码。 ISO-8859-1中未定义每个字符的第二个字节,因此在解码过程中它们保持不变。
假设此损坏的数据是由API生成的,则需要对反序列化的json数据进行迭代,并将每个字符串编码为ISO-8859-1,然后将结果字节解码为UTF-8。
>>> bad = 'SÃ\u0083O LUÃ\u008dS'
>>> bad.encode('latin-1').decode('utf-8')
'SÃO LUÍS'