Django:防止字符串被unicode转义?

Kin*_*gFu 3 python django encoding

我试图防止valuePOST 请求中的字符串(在本例中为变量)被转义,因为它存储在 JSON 中。我的代码是

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)
Run Code Online (Sandbox Code Playgroud)

我可以看到的调试value是 unicode 类型,我相信这就是 Django 处理请求对象的方式。实际的字符串,尽管 unicode 在 之前不会对其特殊字符进行转义post[key] = value。如果我尝试更改此设置post[key] = value.encode('utf-8')以防止它被转义,则会收到错误:'ascii' codec can't decode byte 0xe2 in position 38: ordinal not in range(128)

有任何想法吗?

Pau*_* Bu 5

如果您想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"}'
Run Code Online (Sandbox Code Playgroud)

更新:json.dumps有和没有ensure_asciiunicode字符串的比较:

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"}'
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助!