2011-01-27 56 views
1

我找到了一個Python程序:Export Django database to xml file,它將django模型轉換爲xml表示形式。試圖運行程序時出現這些錯誤。我的模型包含一些用法語寫的文字。嘗試將Django模型轉換爲XML時出現UnicodeEncodeError

Traceback (most recent call last): 
    File "xml_export.py", line 71, in <module> 
    writer.content(value) 
File "xml_export.py", line 41, in content 
    self.output += str(text) 
UnicodeEncodeError: 'ascii' codec can't encode character u'\xe9' in position 3: 
ordinal not in range(128) 

回答

7

它看起來像你的變量text包含一個非ASCII字符串。

參見:

>>> mystring = u"élève" 
>>> mystring 
u'\xe9l\xe8ve' 
>>> str(mystring) 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
UnicodeEncodeError: 'ascii' codec can't encode character u'\xe9' in position 0: ordinal not in range(128) 

所以,你首先需要您的串編碼爲UTF-8

>>> str(mystring.encode("utf-8")) 
'\xc3\xa9l\xc3\xa8ve' 

或者,如果(如註釋顯示)text可能包含其他變量類型,除了字符串,使用

self.output += unicode(mystring).encode("utf-8") 
+0

如果我這樣做,我得到:回溯(最後最近一次調用): 文件 「xml_export.py」,71行,在 writer.content(值) 文件 「xml_export.py」 41行,在內容 self.output + = str(text.encode(「utf-8」)) AttributeError:'int'object has no attribute'encode' – Seitaridis 2011-01-27 14:06:37

+0

這很奇怪。這意味着`text`包含一個整型變量。這反過來使得很難弄清楚爲什麼在`text`中會出現'é`,除非該變量沿着路徑改變其類型(這在Python中是合法的),但是這使得這種情況更加困難。您需要提供更多信息 - 「文本」來自哪裏?你在做什麼? – 2011-01-27 14:09:35

0

您是否嘗試過使用內置命令:

./manage.py dumpdata --format xml 

u'élève'使用統一的方式是確定的,所以這應該工作(normalement ...)。

3

嚴重的是,不要使用鏈接的代碼。這很糟糕,似乎是由完全沒有unicode知識,字符編碼或甚至如何構建XML文檔的人編寫的。字符串聯合?真?

只是不要使用它。

相關問題