|
|
|
|
|
在本文中,我們將解決以下有關在 Python 中使用 Unicode JSON 數(shù)據(jù)的常見問題。
將非 ASCII 或 Unicode 數(shù)據(jù)另存為 JSON 中的 \u 轉義序列
在本例中,我們將嘗試將 Unicode 數(shù)據(jù)編碼為 JSON。當你想將 Unicode 字符轉儲為字符而不是轉義序列時,此解決方案很有用。
設置ensure_ascii=False
于json.dumps()
進行Unicode原樣成JSON。
import json
unicodeData= {
"string1": "明彥",
"string2": u"\u00f8"
}
print("unicode Data is ", unicodeData)
encodedUnicode = json.dumps(unicodeData, ensure_ascii=False) # use dump() method to write it in file
print("JSON character encoding by setting ensure_ascii=False", encodedUnicode)
print("Decoding JSON", json.loads(encodedUnicode))
輸出:
unicode Data is {'string1': '明彥', 'string2': 'ø'}
JSON character encoding by setting ensure_ascii=False {"string1": "明彥", "string2": "ø"}
Decoding JSON {'string1': '明彥', 'string2': 'ø'}
注意:此示例對于將 Unicode 字符串按原樣存儲在 JSON 中很有用。
JSON 序列化 Unicode 數(shù)據(jù)并將其寫入文件
在上面的示例中,我們看到了如何將非 ASCII 或 Unicode 數(shù)據(jù)另存為 JSON 中的 \u 轉義序列?,F(xiàn)在,讓我們看看如何將 JSON 序列化的 Unicode 數(shù)據(jù)按原樣寫入文件。
import json
sampleDict= {
"string1": "明彥",
"string2": u"\u00f8"
}
with open("unicodeFile.json", "w", encoding='utf-8') as write_file:
json.dump(sampleDict, write_file, ensure_ascii=False)
print("Done writing JSON serialized Unicode Data as-is into file")
with open("unicodeFile.json", "r", encoding='utf-8') as read_file:
print("Reading JSON serialized Unicode data from file")
sampleData = json.load(read_file)
print("Decoded JSON serialized Unicode data")
print(sampleData["string1"], sampleData["string1"])
輸出:
Done writing JSON serialized Unicode Data as-is into file
Reading JSON serialized Unicode data from file
Decoded JSON serialized Unicode data
明彥 明彥
按原樣寫入 Unicode 數(shù)據(jù)后的 JSON 文件
將 Unicode 對象序列化為 UTF-8 JSON 字符串而不是 \u 轉義序列
你還可以將 JSON 編碼設置為 UTF-8。UTF-8 是最大互操作性的推薦默認值。ensure_ascii=False
使用“ UTF-8 ”設置為 Unicode 數(shù)據(jù)并將其編碼為 JSON 。
import json
# encoding in UTF-8
unicodeData= {
"string1": "明彥",
"string2": u"\u00f8"
}
print("unicode Data is ", unicodeData)
print("Unicode JSON Data encoding using utf-8")
encodedUnicode = json.dumps(unicodeData, ensure_ascii=False).encode('utf-8')
print("JSON character encoding by setting ensure_ascii=False", encodedUnicode)
print("Decoding JSON", json.loads(encodedUnicode))
輸出:
unicode Data is {'string1': '明彥', 'string2': 'ø'}
Unicode JSON Data encoding using utf-8
JSON character encoding by setting ensure_ascii=False b'{"string1": "\xe6\x98\x8e\xe5\xbd\xa6", "string2": "\xc3\xb8"}'
Decoding JSON {'string1': '明彥', 'string2': 'ø'}
使用 Python 將 Unicode 和 ASCII(混合數(shù)據(jù))編碼為 JSON
在這個例子中,我們將看到如何將 Python 字典編碼為包含 Unicode 和 ASCII 數(shù)據(jù)的 JSON。
import json
sampleDict = {"name": "明彥", "age": 25}
print("unicode Data is ", sampleDict)
# set ensure_ascii=True
jsonDict = json.dumps(sampleDict, ensure_ascii=True)
print("JSON character encoding by setting ensure_ascii=True")
print(jsonDict)
print("Decoding JSON", json.loads(jsonDict))
# set ensure_ascii=False
jsonDict = json.dumps(sampleDict, ensure_ascii=False)
print("JSON character encoding by setting ensure_ascii=False")
print(jsonDict)
print("Decoding JSON", json.loads(jsonDict))
# set ensure_ascii=False and encode using utf-8
jsonDict = json.dumps(sampleDict, ensure_ascii=False).encode('utf-8')
print("JSON character encoding by setting ensure_ascii=False and UTF-8")
print(jsonDict)
print("Decoding JSON", json.loads(jsonDict))
輸出:
unicode Data is {'name': '明彥', 'age': 25}
JSON character encoding by setting ensure_ascii=True
{"name": "\u660e\u5f66", "age": 25}
Decoding JSON {'name': '明彥', 'age': 25}
JSON character encoding by setting ensure_ascii=False
{"name": "明彥", "age": 25}
Decoding JSON {'name': '明彥', 'age': 25}
JSON character encoding by setting ensure_ascii=False and UTF-8
b'{"name": "\xe6\x98\x8e\xe5\xbd\xa6", "age": 25}'
Decoding JSON {'name': '明彥', 'age': 25}
Python轉義非ASCII字符,同時將其編碼為JSON
讓我們看看如何存儲所有傳入的非 ASCII 字符在 JSON 中轉義。這是一種表示 Unicode 字符的安全方式。通過設置,ensure_ascii=True
我們確保生成的 JSON 是有效的 ASCII 字符(即使它們里面有 Unicode)。
import json
unicodeData= {
"string1": "明彥",
"string2": u"\u00f8"
}
print("unicode Data is ", unicodeData)
# set ensure_ascii=True
encodedUnicode = json.dumps(unicodeData, ensure_ascii=True)
print("JSON character encoding by setting ensure_ascii=True")
print(encodedUnicode)
print("Decoding JSON")
print(json.loads(encodedUnicode))
輸出:
unicode Data is {'string1': '明彥', 'string2': 'ø'}
JSON character encoding by setting ensure_ascii=True
{"string1": "\u660e\u5f66", "string2": "\u00f8"}
Decoding JSON
{'string1': '明彥', 'string2': 'ø'}
總結
本文介紹了有關在 Python 中使用 Unicode JSON 數(shù)據(jù)的常見問題,希望對你有所幫助。