Derzeit habe ich dieses Wörterbuch, gedruckt mit 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}
Wenn ich das mache:
import json
d = (my dictionary above)
jsonarray = json.dumps(d)
Ich erhalte diesen Fehler: 'utf8' codec can't decode byte 0xff in position 0: invalid start byte
python
python-2.7
HyperDevil
quelle
quelle
\xff
Antworten:
Wenn Sie mit nicht druckbaren Symbolen in Ihrem JSON gut zurechtkommen, fügen Sie
ensure_ascii=False
zumdumps
Anruf hinzu.quelle
indent=n
zu den Optionen hinzu, um hübsch zu drucken, won
ist die Anzahl der einzurückenden Leerzeichensure_ascii = False verschiebt das Problem wirklich nur auf die Dekodierungsphase:
Letztendlich können Sie keine Rohbytes in einem JSON-Dokument speichern. Daher sollten Sie eine Methode verwenden, um eine Folge beliebiger Bytes eindeutig als ASCII-Zeichenfolge zu codieren, z. B. base64.
quelle
b64encode
. Zum Beispiel für die 256 Zeichenkettes = ''.join(chr(i) for i in xrange(256))
,len(json.dumps(b64encode(s))) == 346
vslen(json.dumps(s.decode('latin1'))) == 1045
.Wenn Sie Python 2 verwenden, vergessen Sie nicht, den Kommentar zur UTF-8-Dateikodierung in die erste Zeile Ihres Skripts einzufügen.
Dies wird einige Unicode-Probleme beheben und Ihnen das Leben erleichtern.
quelle
Eine mögliche Lösung, die ich verwende, ist die Verwendung von Python3. Es scheint viele utf-Probleme zu lösen.
Entschuldigen Sie die späte Antwort, aber sie kann den Menschen in Zukunft helfen.
Beispielsweise,
quelle