Actuellement, j'ai ce dictionnaire, imprimé en utilisant 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}
Quand je fais ça:
import json
d = (my dictionary above)
jsonarray = json.dumps(d)
J'obtiens cette erreur: 'utf8' codec can't decode byte 0xff in position 0: invalid start byte
python
python-2.7
HyperDevil
la source
la source
\xff
Réponses:
Si vous êtes d'accord avec les symboles non imprimables dans votre json, ajoutez
ensure_ascii=False
à l'dumps
appel.la source
indent=n
aux options de pretty print, oùn
est le nombre d'espaces à indenterassurer_ascii = False ne reporte vraiment le problème qu'à l'étape de décodage:
En fin de compte, vous ne pouvez pas stocker des octets bruts dans un document JSON, vous voudrez donc utiliser un moyen d'encoder sans ambiguïté une séquence d'octets arbitraires sous forme de chaîne ASCII - telle que base64.
la source
b64encode
. Par exemple, pour la chaîne de caractères 256s = ''.join(chr(i) for i in xrange(256))
,len(json.dumps(b64encode(s))) == 346
vslen(json.dumps(s.decode('latin1'))) == 1045
.Si vous utilisez Python 2, n'oubliez pas d'ajouter le commentaire d'encodage de fichier UTF-8 sur la première ligne de votre script.
Cela résoudra certains problèmes Unicode et vous facilitera la vie.
la source
Une solution possible que j'utilise est d'utiliser python3. Il semble résoudre de nombreux problèmes utf.
Désolé pour la réponse tardive, mais cela pourrait aider les gens à l'avenir.
Par exemple,
la source