Atualmente tenho este dicionário, impresso usando pprint
:
{'AlarmExTempHum': '\x00\x00\x00\x00\x00\x00\x00\x00',
'AlarmIn': 0,
'AlarmOut': '\x00\x00',
'AlarmRain': 0,
'AlarmSoilLeaf': '\x00\x00\x00\x00',
'BarTrend': 60,
'BatteryStatus': 0,
'BatteryVolts': 4.751953125,
'CRC': 55003,
'EOL': '\n\r',
'ETDay': 0,
'ETMonth': 0,
'ETYear': 0,
'ExtraHum1': None,
'ExtraHum2': None,
'ExtraHum3': None,
'ExtraHum4': None,
'ExtraHum5': None,
'ExtraHum6': None,
'ExtraHum7': None,
'ExtraTemp1': None,
'ExtraTemp2': None,
'ExtraTemp3': None,
'ExtraTemp4': None,
'ExtraTemp5': None,
'ExtraTemp6': None,
'ExtraTemp7': None,
'ForecastIcon': 2,
'ForecastRuleNo': 122,
'HumIn': 31,
'HumOut': 94,
'LOO': 'LOO',
'LeafTemps': '\xff\xff\xff\xff',
'LeafWetness': '\xff\xff\xff\x00',
'NextRec': 37,
'PacketType': 0,
'Pressure': 995.9363359295631,
'RainDay': 0.0,
'RainMonth': 0.0,
'RainRate': 0.0,
'RainStorm': 0.0,
'RainYear': 2.8,
'SoilMoist': '\xff\xff\xff\xff',
'SoilTemps': '\xff\xff\xff\xff',
'SolarRad': None,
'StormStartDate': '2127-15-31',
'SunRise': 849,
'SunSet': 1611,
'TempIn': 21.38888888888889,
'TempOut': 0.8888888888888897,
'UV': None,
'WindDir': 219,
'WindSpeed': 3.6,
'WindSpeed10Min': 3.6}
Quando eu faço isso:
import json
d = (my dictionary above)
jsonarray = json.dumps(d)
Eu recebo este erro: 'utf8' codec can't decode byte 0xff in position 0: invalid start byte
python
python-2.7
HyperDevil
fonte
fonte
\xff
Respostas:
Se você estiver satisfeito com símbolos não imprimíveis em seu json, adicione
ensure_ascii=False
àdumps
chamada.fonte
indent=n
às opções de impressão bonita, onden
é o número de espaços para recuargarantir_ascii = False realmente apenas adia o problema para o estágio de decodificação:
Em última análise, você não pode armazenar bytes brutos em um documento JSON, então você vai querer usar alguns meios de codificar inequivocamente uma sequência de bytes arbitrários como uma string ASCII - como base64.
fonte
b64encode
. Por exemplo, para a cadeia de 256 caracteress = ''.join(chr(i) for i in xrange(256))
,len(json.dumps(b64encode(s))) == 346
vslen(json.dumps(s.decode('latin1'))) == 1045
.Se você usa Python 2, não se esqueça de adicionar o comentário de codificação do arquivo UTF-8 na primeira linha do seu script.
Isso corrigirá alguns problemas de Unicode e tornará sua vida mais fácil.
fonte
Uma possível solução que uso é usar o python3. Parece resolver muitos problemas de utf.
Desculpe pela resposta tardia, mas pode ajudar as pessoas no futuro.
Por exemplo,
fonte