您正在查看轉儲數據的表示形式。由於您已禁用JSON_AS_ASCII
,因此您將獲得兩個UTF-8字節,而不是與ASCII兼容的Unicode轉義符。無論您選擇哪種表示形式,JSON仍然是UTF-8,但使用默認設置通常更安全。
無論您用什麼查看數據,都會將字節錯誤地解釋爲Latin-1,而不是UTF-8。告訴你正在查看的數據是UTF-8,它看起來是正確的。從JSON加載數據,你會發現它仍然是正確的。
from flask import Flask, jsonify, json
app = Flask('example')
app.config['JSON_AS_ASCII'] = True # default
with app.app_context():
print(jsonify('é').data) # b'"\\u00e9"\n', Unicode escape
app.config['JSON_AS_ASCII'] = False
with app.app_context():
print(jsonify('é').data) # b'"\xc3\xa9"\n', UTF-8 bytes
# you're viewing the bytes as Latin-1
print(b'\xc3\xa9'.decode('latin1')) # é
# but it's UTF-8
print(b'\xc3\xa9'.decode('utf8')) # é
# JSON is always UTF-8
print(json.loads(b'"\\u00e9"\n') # é
print(json.loads(b'"\xc3\xa9"\n') # é
謝謝,但我不明白我是如何糾正代碼打印'é'使用jsonify。 –
沒有什麼可以糾正的。無論你正在查看的字節是選擇錯誤的編碼來顯示它,但JSON始終是UTF-8。選擇UTF-8,它看起來是正確的。加載數據,它將是正確的。 – davidism
我正在通過訪問本地主機/(通過@ app.route('/')定義的路由Chrome瀏覽器查看字節數 –