2017-09-20 71 views
0

jsonify('é')不會打印我所期望的內容。而不是é,我看到é使用Flask的jsonify顯示屏幕é

app = Flask(__name__) 
app.config['JSON_AS_ASCII'] = False 

@app.route('/') 
def test(): 
    return jsonify('é') 

該腳本的編碼是UTF-8。 UTF-8 JSON編碼應該由JSON_AS_ASCII = False激活。

回答

1

您正在查看轉儲數據的表示形式。由於您已禁用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') # é 
+0

謝謝,但我不明白我是如何糾正代碼打印'é'使用jsonify。 –

+1

沒有什麼可以糾正的。無論你正在查看的字節是選擇錯誤的編碼來顯示它,但JSON始終是UTF-8。選擇UTF-8,它看起來是正確的。加載數據,它將是正確的。 – davidism

+0

我正在通過訪問本地主機/(通過@ app.route('/')定義的路由Chrome瀏覽器查看字節數 –