3

valueJSONに格納されるため、POSTリクエストの文字列(この場合は変数)がエスケープされないようにしようとしています。私のコードは

def addProduct(request):
    if request.POST:
        post = {}
        for key in request.POST:
            value = request.POST[key].encode('utf-8')
            try:
                value = json.loads(value).encode('utf-8')
            except Exception:
                pass
            post[key] = value.encode('utf-8')
        doc = json.dumps(post)

私が見ることができるデバッグvalueは、Djangoがリクエストオブジェクトを処理する方法であると私が信じているタイプのユニコードです。実際の文字列ですが、Unicode は特殊文字をエスケープするまで取得しませんpost[key] = valuepost[key] = value.encode('utf-8')エスケープされないようにこれを変更しようとすると、エラーが発生します。'ascii' codec can't decode byte 0xe2 in position 38: ordinal not in range(128)

何か案は?

4

2 に答える 2

3

特殊文字を維持したい場合json.dumpsは、引数が役立つと思いますensure_ascii=False

  1. この回答を見てください: Python で JSON にダンプすると、文字列内の Unicode 値がエスケープされます
  2. これはドキュメントですjson.dumps

自分で行う代わりに、出力をエスケープするensure_ascii=False問題を解決すると思います。json

元:

json.dumps({'h':u'\xc2\xa3'},ensure_ascii=False)
>>>u'{"h": "\xc2\xa3"}'

更新:ユニコード文字列のjson.dumps有無の比較:ensure_ascii

In [7]: json.dumps({'a':u'\u00a3'},ensure_ascii=False)
Out[7]: u'{"a": "\xa3"}'

In [8]: json.dumps({'a':u'\u00a3'})
Out[8]: '{"a": "\\u00a3"}'

お役に立てれば!

于 2013-06-20T19:33:30.383 に答える
0

これを再現できません。json.dumps Unicode オブジェクトと UTF-8 でエンコードされたバイト文字列の両方を指定しようとしましたが、どちらの場合も、正しく Unicode エスケープされた json データを取得しました。

>>> json.dumps({'foo': u'lölölö'})
'{"foo": "l\\u00f6l\\u00f6l\\u00f6"}'
>>> json.dumps({'foo': u'lölölö'.encode('utf8')})
'{"foo": "l\\u00f6l\\u00f6l\\u00f6"}'

Python 2.6 と 2.7、および Python 3.1 でこれを試しました。

>>> json.dumps({'foo': 'lölölö'})
'{"foo": "l\\u00f6l\\u00f6l\\u00f6"}'
于 2013-06-20T19:22:42.253 に答える