2013-10-12 45 views
1

所以我想在加載該行作爲一個模型的名稱加載:Unicode的錯誤在Django而在數據

"Auf der grünen Wiese (1953)" 

,但我得到的錯誤

UnicodeDecodeError: 'utf8' codec can't decode byte 0xfc in position 70: invalid start byte 

我看:http://docs.python.org/2/howto/unicode.html#the-unicode-type 但我仍然不完全確定解決這個問題。我可以把它作爲一個unicode來替換/忽略錯誤,但我不認爲這是最理想的解決方案?

我也看到django提供了一些函數來幫助這個東西:https://docs.djangoproject.com/en/dev/ref/unicode/但我還不太確定如何處理它。

回答

3

該行使用latin1進行編碼。要正確地對其進行解碼 你應該做的(假設的Python 2.x的):

line = 'Auf der gr\xfcnen Wiese (1953)' 
name = line.decode('latin1') 

如果你從一個文件讀這篇文章,你也可以這樣做:

f = codecs.open(path, 'r', 'latin1') 
name = f.readline().strip() 
+0

所以一般來說,最字符串有用不同的語言編碼爲latin1的符號?與英語具有相似字符的語言我的意思是。 – dl8

+0

這是一個複雜的問題。這取決於你的數據源。至少在我的經驗中,UTF-8現在通常比拉丁-1更常見,但是如果沒有上下文的概括就會很危險。 http://www.joelonsoftware.com/articles/Unicode.html對字符集的基礎知識,Unicode和不同的編碼有非常好的和合理的解釋,這些編碼應該有助於使Python工具更有意義,如果你不是已經在這方面很好地接地了。 –

+0

另外,對於嚴格的python透視圖,http://bit.ly/unipain。 – geoffspear