2016-06-19 8 views
0

フラスコにwebappを書きます。これは、ラズベリーパイのMySQLサーバーからテーブルを取得します。テーブルを作成するときPOST後に適切なエンコーディングでフラスコ内のjsonを返す方法

で初期状態POSTMAN

  • でテストIはUTF-8ビンにMySQLのワークベンチでエンコーディングを設定しました。

  • IがのMySQLdbにのcharset = UTF8を設定MySQLdb.connect(文字セット= UTF8)

を使用する場合、元のJSONは次のように見えます。

{ 
    "Menu": [ 
    [ 
     1, 
     "ΣΑΛΑΤΑ", 
     "ΚΡΗΤΙΚΗ", 
     5.5 
    ], 
    [ 
     2, 
     "ΣΑΛΑΤΑ", 
     "ΦΑΚΗ", 
     6 
    ]] 
} 

この私がWebページ上でそれを印刷したいときに、戻りJSON(POSTMAN)

{ 
    "Menu": [ 
    [ 
     1, 
     "ΣΑΛΑΤΑ", 
     "ΚΡΗΤΙΚΗ", 
     5.5 
    ], 
    [ 
     2, 
     "ΣΑΛΑΤΑ", 
     "ΦΑΚΗ", 
     6 
    ]] 
} 

はSO FAR POSTMAN、それは今だけFINE

ワークスされます次のように表示されます。

{ 
    "Menu": [ 
    [ 
     1, 
     "\u03a3\u0391\u039b\u0391\u03a4\u0391", 
     "\u039a\u03a1\u0397\u03a4\u0399\u039a\u0397", 
     5.5 
    ], 
    [ 
     2, 
     "\u03a3\u0391\u039b\u0391\u03a4\u0391", 
     "\u03a6\u0391\u039a\u0397", 
     6.0 
    ] 
    ] 
    } 

アンドロイドアプリケーションから同じ問題を投稿したとき。

jsonを返すには私はjsonifyを使用しています。

+0

Pythonで 'print'すると何が表示されますか? HTMLファイルに ''を含めましたか? – oxalorg

+1

これは有効なデータですが、ASCIIになるようにエスケープされています。あなたは実際にどのように*データを使用していますか? [編集]に[mcve]を含めるようにしてください。 – davidism

+0

私は画面に戻っているだけで、HTMLコードはありません。ちょうど 'jsonify({'Menu':メニュー}')。 'app.config ['JSON_AS_ASCII'] = False'の有無にかかわらず、効果は同じです。 ** POSTMAN ** –

答えて

0

有効なJSONです。ユニコード文字がエスケープされ、値がASCIIになります。

実際にJavaScriptでJSONを解析すると、正しい値が得られます。 AJAXリクエストでエンドポイントを呼び出したとすると、コールバック内のデータはJSON.parseでロードされます。いくつかのAJAXライブラリがこれを処理します。

var parsed_data = JSON.parse(data); 

あなたはJSON_AS_ASCIIを無効にすることでASCIIにすべてを逃げるjsonifyを停止することができます。これは、応答に無効な文字が入る可能性があるため、これを避けるべきです。

app.config['JSON_AS_ASCII'] = False 

好ましくは、データをそのままの状態でJavaScriptから使用します。

+0

の 'app.config ['JSON_AS_ASCII'] = False'の有無にかかわらず正しく表示されます。効果は同じです。 ** POSTMAN ** –

+0

には正しく表示されるだけです。そのJSONの16進数のダンプを取得する方法はありますか? –

+0

JSON仕様の一部で、Unicode文字が文字列内で有効です。 – jwg

関連する問題