2013-10-12 31 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