2012-03-27 70 views
2

去年,我建立了一個django站點,它爲客戶端同時使用儀表板和API。django + unicode常量錯誤

它們有時會將unicode信息(通常通過Microsoft鍵盤和單引號字符!)放入數據庫中。

它的優良改變這一情況的一切,但我經常得到的是這樣的錯誤,當一個新的角色加入,我沒有「轉換」:

的UnicodeDecodeError在/ XX/XXXXX/API/xxx.json

「ASCII」編解碼器在0位置無法解碼字節將0xEB:在範圍序數不(128)

的問題其實是,我需要能夠轉換這個unicode(從模型)到HTML。

# if a char breaks the system, replace it here (duplicate line) 
text = unicode(str(text).replace('\xa3', '£')) 

我在這裏重複這一行,但它只是以其他方式打破。

把我的頭髮拉出來,因爲我知道這是直截了當的,我在某個地方做某事非常愚蠢。

已經在其他地方搜索過,並意識到雖然我的問題不是新的,但我在其他地方找不到答案。

+0

下面是一個很好的介紹,以解決unicode疼痛:http://bit.ly/unipain – 2012-03-27 15:03:19

回答

0

我認爲text是unicode(這似乎一個安全的假設,因爲\xa3對於£字符的Unicode)。

我不確定爲什麼你需要對它進行編碼,看到文本將被轉換爲utf-8在模板中的輸出,並且所有的瀏覽器都完全能夠顯示它。可能還有另外一點,不幸的是,可能你的代碼會假設ASCII,而隱式轉換正在破壞事情。

在這種情況下,你可能只是這樣做:

text = text.encode('ascii', 'xmlcharrefreplace') 

其中非ASCII字符轉換成像£ HTML/XML實體。

+0

嘿......已經嘗試了很多方法...把這行放在所有代碼的其餘部分之前,它似乎工作!吶喊!謝謝 – padajo 2012-03-27 15:43:18

0

告訴JSON解碼器,它應該將json文件解碼爲unicode。當直接使用json模塊,這可以使用此代碼來完成:

json.JSONDecoder(encoding='utf8').decode(
    json.JSONEncoder(encoding='utf8').encode('blä')) 

如果JSON解碼通過一些其他模塊發生(Django的,...),也許你可以通過這個另一模塊爲傳遞信息JSON的東西。