Actualmente tengo este diccionario, impreso 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}
Cuando hago esto:
import json
d = (my dictionary above)
jsonarray = json.dumps(d)
Me sale este error: 'utf8' codec can't decode byte 0xff in position 0: invalid start byte
python
python-2.7
HyperDevil
fuente
fuente
\xff
Respuestas:
Si está de acuerdo con los símbolos no imprimibles en su json, agregue
ensure_ascii=False
paradumps
llamar.fuente
indent=n
a las opciones de impresión bonita, donden
está el número de espacios para sangrarasegurar_ascii = Falso realmente solo pospone el problema a la etapa de decodificación:
En última instancia, no puede almacenar bytes sin procesar en un documento JSON, por lo que querrá usar algún medio para codificar sin ambigüedades una secuencia de bytes arbitrarios como una cadena ASCII, como base64.
fuente
b64encode
. Por ejemplo, para la cadena de 256 caracteress = ''.join(chr(i) for i in xrange(256))
,len(json.dumps(b64encode(s))) == 346
vslen(json.dumps(s.decode('latin1'))) == 1045
.Si usa Python 2, no olvide agregar el comentario de codificación del archivo UTF-8 en la primera línea de su secuencia de comandos.
Esto solucionará algunos problemas de Unicode y le facilitará la vida.
fuente
Una posible solución que utilizo es usar python3. Parece resolver muchos problemas de utf.
Perdón por la respuesta tardía, pero puede ayudar a las personas en el futuro.
Por ejemplo,
fuente