当前位置: 首页 > 知识库问答 >
问题:

Django:防止字符串被unicode转义?[重复]

端木安国
2023-03-14

我试图防止POST请求中的字符串(在本例中为变量)被转义,因为它将存储在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)

调试我可以看到value是unicode类型,我相信这是Django处理请求对象的方式。实际的字符串,尽管unicode没有得到它的特殊字符,直到post[key]=value。如果我尝试将其更改为post[key]=value.encode('utf-8')以防止它被转义,我得到错误:'ascii'编解码器无法解码位置38的字节0xe2:序数不在范围内(128)

有什么想法吗?

共有2个答案

蒲功
2023-03-14

我不能复制这个。我尝试给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"}'
宣高朗
2023-03-14

如果您希望< code>json.dumps保留特殊字符,我想您可能会发现参数< code > assure _ ascii = False 很有用。

  1. 看看这个答案:在Python中转储到JSON时,字符串中的Unicode值被转义
  2. 这是 json.dumps 的文档

我认为< code > assure _ ascii = False 将解决< code>json对输出进行转义的问题,而不是自己去做。

前任:

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

更新:使用和不具有ensure_ascii和 unicode 字符串的 json.dump 的比较:

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"}'

希望这有帮助!

 类似资料:
  • 问题内容: 在解析包含unicode转义序列的json字符串时,存在一个长期存在的错误。似乎需要修复该错误,这种错误可能很快就不会发生,因此我正在寻找一种在R中创建解决方法的方法,该方法在将序列提供给json解析器之前先取消序列化。 一些上下文:json数据始终是unicode,默认情况下使用,因此通常不需要转义。但是出于历史原因,json确实支持转义的unicode。因此json数据 和 是等效

  • 问题内容: 我需要将unicode字符串转换为具有以unicode编码的非ascii字符的字符串。例如,字符串“汉字Max”应显示为“ \ u6F22 \ u5B57 Max”。 我尝试过的 的不同组合 新的String(sourceString.getBytes(encoding1),encoding2) Apache StringEscapeUtils也会转义ascii字符,例如双引号 Str

  • 问题内容: 我试图在Java中放置一些反SQL注入,并发现使用“ replaceAll”字符串函数非常困难。最后,我需要,将转换现有的功能使得当字符串由MySQL的SQL注入评估将被阻止。 我已经整理了一些正在使用的代码,并且该函数中的所有内容都使我大失所望。如果有人碰巧有这个例子,我将不胜感激。 问题答案: PreparedStatement是可行的方法,因为它们使SQL注入成为不可能。这是一个

  • 问题内容: 我试图在Java中放置一些反SQL注入,并发现使用“ replaceAll”字符串函数非常困难。最后,我需要,将转换现有的功能来,任何到,任何到,任何以使得当字符串由MySQL的SQL注入评估将被阻止。 我已经整理了一些正在使用的代码,并且该函数中的所有内容都使我大失所望。如果有人碰巧有这个例子,我将不胜感激。 问题答案: PreparedStatement是可行的方法,因为它们使SQ

  • 我想将请求响应记录到文件中,但是当我使用< code>getLogger()时。warning(string),以下字符串是unicode转义的示例: 这段代码将写入日志文件unicode转义字符串,其中“Оļибка”将写为“\u0417\u0430\u043a\u0430-u0437…”,但我想按原样查看这些字符。

  • 本文向大家介绍Json_encode防止汉字转义成unicode的方法,包括了Json_encode防止汉字转义成unicode的方法的使用技巧和注意事项,需要的朋友参考一下 大家都知道,json_encode通常会把json中的汉字转义成unicode,但是这并不一定是我们想要的。有时候,我们需要获得汉字形式的json字符串,比如需要获得gbk编码的json字符串(只要把汉字形式的字符串转码就可