Saat ini saya memiliki kamus ini, yang dicetak menggunakan 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}
Ketika saya melakukan ini:
import json
d = (my dictionary above)
jsonarray = json.dumps(d)
Saya mendapatkan kesalahan ini: 'utf8' codec can't decode byte 0xff in position 0: invalid start byte
python
python-2.7
HyperDevil
sumber
sumber
\xff
Jawaban:
Jika Anda baik-baik saja dengan simbol yang tidak dapat dicetak di json Anda, tambahkan
ensure_ascii=False
kedumps
panggilan.sumber
indent=n
ke opsi untuk cukup mencetak, di manan
adalah jumlah spasi untuk indentasisure_ascii = False benar-benar hanya mengalihkan masalah ke tahap decoding:
Pada akhirnya, Anda tidak dapat menyimpan byte mentah dalam dokumen JSON, jadi Anda akan ingin menggunakan beberapa cara untuk mengenkode urutan byte arbitrer secara jelas sebagai string ASCII - seperti base64.
sumber
b64encode
. Misalnya, untuk string 256 karakters = ''.join(chr(i) for i in xrange(256))
,len(json.dumps(b64encode(s))) == 346
vslen(json.dumps(s.decode('latin1'))) == 1045
.Jika Anda menggunakan Python 2, jangan lupa untuk menambahkan komentar encoding file UTF-8 di baris pertama skrip Anda.
Ini akan memperbaiki beberapa masalah Unicode dan membuat hidup Anda lebih mudah.
sumber
Salah satu solusi yang mungkin saya gunakan adalah dengan menggunakan python3. Tampaknya menyelesaikan banyak masalah utf.
Maaf atas jawaban yang terlambat, tetapi ini dapat membantu orang di masa depan.
Sebagai contoh,
sumber