2017-09-20 6 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を無効にしたので、ASCII互換のUnicodeエスケープではなく、2つのUTF-8バイトが得られます。 JSONはあなたが選んだ表現にかかわらず、UTF-8ですが、通常はデフォルトに固執するのがより安全です。

データを表示するために使用しているものは、バイトをUTF-8ではなくLatin-1として誤って解釈しています。データが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

Chromeでバイトを表示しています(@ app.route( '/')で定義されたルート)localhost /に移動します –

関連する問題