2

我偶然发现了一个我无法解决的奇怪问题:

在我的 Django 应用程序中,有一个方法被来自 java 小程序的 POST 命中,该方法向它发送一个 JSON 对象。Django 方法像这样解析它:

req = json.loads(request.raw_post_data)

并根据结果返回一个值。我还没有写这段代码,但是昨天我被派去调查这个方法中触发的错误。它说有“ValueError:期望属性名称:第1行第1列(char 1)”。

我发现我的原始帖子数据如下所示:

{#012#011"ImmutableMachineFactors": #012#011{#012#011#011"machineName": "lukka",#012#011#011"osName": "MacOS"}}

它的类型是字符串,但是,我尝试用空格替换这些奇怪的字符或什么都没有失败。它只会忽略 sub() 命令。我知道 raw_post_data 返回一个字节串,但是当我尝试使用以下方法将其转换为常规字符串时:

mystring.decode('utf-8')

它确实添加了 u'' 符号,但没有删除那些奇怪的字符。更奇怪的是,在很多情况下(在我的个人机器上),Django 很乐意将这种数据转换为 JSON,但有时它只会失败,这让我相信触发错误的 JSON 格式不正确,但是当我删除时所有的#011 和#012 字符,它完美解析。

我的问题是:1)那些疯狂的事情是什么?(#011,#012)。我试着用谷歌搜索,但这些都是在搜索中很常见的东西,所以我找不到任何相关的东西。2)我怎样才能把这个字节串变成一个普通的字符串,这样我就可以替换那些字符?或者它是解决这个问题的扭曲方式?

谢谢!卢卡

4

1 回答 1

0

这可能为时已晚,但由于 QueryDict 实例(request.POST 或 request.DATA)是不可变的,因此可以合理地预期 request.raw_post_data 也是不可变的。您必须在更改之前制作副本。

于 2014-03-15T17:47:13.867 回答