2016-04-02 3 views
3

私はフラスコとjsonifyを使って実験を行ってきました。できます。しかし、utf-8キャラクタ(トルコ文字)はサポートしていません。私は辞書を使っています。フラスコはjsonifyでUTF-8をサポートしていますか?

if api_key in key_list: 
    quotes = { 
       'ataturk': 
       ['Hayatta En Hakiki Mursit Ilimdir Fendir', 
       'Birgün benim naciz bedenim'], 
        'mahatma gandhi': 
       ['Happiness is when what you think, what you' 
       'say,and what you do are in harmony.'] 
      } 

    get_quote = quotes[karakter(author.lower(), harfler)] 

    quote = { 
       'quotes': random.choice(get_quote), 
      } 

    return jsonify(quote) 

私はエンコードしようとしましたが機能しません。デバッグモードでこのエラーが発生しました。

AttributeError: 'dict' object has no attribute 'encode'

どうすればこの問題を解決できますか?

+0

はあなたが**説明することができます\ u00fcn "'?これは完全に有効なJSONであり、JSONをデコードするときに必要な文字列になります。 –

答えて

0

引用符の前にuを付けます(例: u'quote bla bla bla '

+0

私は誤解していると思います。私の出力は次のようになります: Birg \ u00fcn benim naciz bedenim – Ali

+0

jsonifyは最初の引数としてdictを取っていませんが、各引数がjsonレスポンスで作成するキーである* argsをとります。 jsonifyは明らかに不可能なdictでエンコードを実行しようとしているため、このエラーが発生しています。 – alexisdevarennes

+0

完全な例を得るために答えを更新しました。それを試してください、それは動作するはずです。 – alexisdevarennes

10

正しいですが、jsonifyはUTF-8文字をサポートしていません。ただし、Unicode文字は完全にサポートされています。

は、これら二つのプログラムを考えてみましょう:あなたが見ることができるように

# http server 
from flask import Flask, jsonify 
app = Flask(__name__) 

@app.route('/') 
def root(): 
    return jsonify({'quote':'Birgün'}) 

if __name__=='__main__': 
    app.run(debug=True) 

 

# http client 
import requests 
import unicodedata 
r = requests.get('http://localhost:5000/') 
j = r.json() 
u = j['quote'][4] 
print("%s: %d %x %s\n"%(u, len(u), ord(u), unicodedata.name(u))) 

は、HTTPクライアントは、それをデコードし、JSONをフェッチし、 "Birgün" の "ü" をチェックします。

結果は、エンドツーエンドの旅行、Python3ストリング、JSONとHTTP、そしてPython3ストリングに戻って生き延びたことを明確にするはずです。

ü: 1 fc LATIN SMALL LETTER U WITH DIAERESIS 

EDIT:そのすべてを言って、あなたが願うように動作するjsonify()を強制しますconfiguration optionがある:**あなたが "`ビルク展望台を避けたい理由

app.config['JSON_AS_ASCII'] = False 
+0

設定オプションの変更は私のために働いた:)このアプローチを使用することには欠点はありますか? – akashbw

関連する問題