2016-05-09 8 views
0

私はいくつかのUnicode文字列を含む辞書を持っています。このdictをJSONファイルとして保存し、AJAX経由でこの内容を表示したいと思います。 final_resは辞書がある場合Python dictからJSONへのUnicode文字列の受け渡し

、私は通常これを行う:私はこれらがUnicodeエンコードされた文字であると想像

"l\\u00a0m\\u00fcdale" 

json.dumps(final_res, ensure_ascii=True) 

を結果では、私のような文字列を参照してください。しかし、Javascriptで表示しようとすると、エンコードされたUnicode文字ではなく、スラッシュが表示されます。

これを正しく表示するためにJavascriptで何か問題がありますか?または、JSONに出力する前に、これらをPythonのASCIIにデコードする必要がありますか?

UPDATE:@spectraと下のコメント欄での議論をもとに

、私はjson.dumpsはダブルスラッシュを出力すべきではないことに気づきました。これをブラウザで解析すると、リテラルの単一スラッシュとして出力されます。

私はjsonモジュールでこれを解決する方法を見つけようとしていますが、なぜ起こっているのかわかりません。

+0

どのような結果をブラウザに送信するのに使用しますか? – spectras

+0

'' \\ u00a0m \\ u00fcdale "' – user1496984

+0

という文字列が表示されていますなぜあなたは 'ensure_ascii = True'を使用していますか?そして、Javascript側でJSONをどのように解析していますか?生のJSON文字列を表示するだけで、そこにUnicodeエスケープを取得できますが、JSONを実際に解析して使用する場合、エスケープはパーサによってUnicodeに処理される必要があります。 – user2357112

答えて

0

私の解決策は、json.dumpsの結果を「シングルスラッシュ」バージョンでデータベースに保存することでした。私はjson.dumpsの結果をprintと呼んで、それをデータベースにコピー・ペーストしました。

+1

インタプリタで視覚化しただけの場合は、printを使用してください。それ以外の場合、インタプリタは文字列を再エスケープします。これは、文字列そのものを表示するのではなく、コピーしてPythonに貼り付けて再作成できるようにするためです。 – spectras

0

あなたはエスケープcharatersするのではなく、UTF8でのJSONファイルをエンコードすることができます。たとえば

json.dumps(final_res,ensure_ascii=False).encode('utf8') 

クライアント側のAJAXコードで次に
print json.dumps({'name':u'l\u00a0m\u00fcdale'},ensure_ascii=False).encode('utf8') 
# {"name": "l müdale"} 

、 'UTF8' にエンコーディングを設定します。 How to set encoding in .getJSON JQuery

$.ajax({ contentType: "application/json; charset=utf-8", ... }) 
関連する問題