2012-06-15 97 views
2

我有一個奇怪的問題絆倒raw_post_data解碼,我解決不了:問題與在Django

在我的Django應用程序有它獲取由Java小程序一個POST打了一個方法,它發送一條JSON對象。 Django方法如下解析它:

req = json.loads(request.raw_post_data) 

並根據結果返回一個值。我沒有寫這段代碼,但昨天我發送了一個調查在這個方法中觸發的錯誤。這是說有「ValueError:期望屬性名稱:第1行第1(字符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)如何將此字符串轉換爲常規字符串,以便我可以替換這些字符?或者這是解決這個問題的方法嗎?

謝謝! Luka

+0

我可以回答你的第一個問題,但我自己有第二部分的問題......這導致我找到你的帖子。因此,#012例如是換行符的ascii Oct值,或\ n,而#011是標籤的ascii Oct值或\ t。 (見http://www.asciitable.com/)。 – bhcastle

回答

0

這可能已經太遲了,但是由於QueryDict實例(request.POST或request.DATA)是不可變的,所以期望request.raw_post_data也是不可變的是合理的。在更改之前,您必須先製作一份副本。