它在64位计算机上运行正常但由于某种原因在32位实例上无法在python 2.4.3上运行。
我收到错误
'utf8' codec can't decode bytes in position 76-79: invalid data
代码
try:
str(sourceresult.sourcename).encode('utf8','replace')
except:
raise Exception( repr(sourceresult.sourcename ) )
它返回'kazamidori blog \ xf9'
我修改了我的site.py文件,使UTF8成为默认编码,但似乎仍无法正常工作。
答案 0 :(得分:7)
我们需要以下内容,我们需要完全输出:
type(sourceresult.sourcename) # I suspect it's already a UTF-8 encoded string
repr(sourceresult.sourcename)
就像我说的,我几乎可以肯定你的sourceresult.sourcename
已经是UTF-8编码的字符串了。
也许this可能会有所帮助。
编辑:您的sourceresult.sourcename
似乎编码为cp1252。我不知道mystring
(你在评论中提到的)是什么。
因此,要获得UTF-8编码的字符串,您需要执行以下操作:
source_as_UTF8= sourceresult.sourcename.decode("cp1252").encode("utf-8")
但是,cp1252编码的字符串不与您提供的错误消息一致。
答案 1 :(得分:0)
“无效数据”通常表示传入数据包含字符集之外的字符。
这通常是由某些时候某些数据以不同于UTF-8的字符集编码而引起的。
例如,当您将UTF-8作为标准字符集时,如果存储字符串的文件未转换为UTF-8。 (在Windows中,您通常可以在文本编辑器的“另存为...”对话框中指定文件的编码)
或者,当数据来自在表,连接或两者中使用不同字符集的数据库时。
查看数据的来源以及沿途设置的编码。
答案 2 :(得分:0)
我认为问题在于你使用了str()函数。请记住,str()返回的是窄字符,即每字符1个字节的字符串。如果输入sourceresult.sourcename是unicode,那么Python会自动对其进行编码以返回一个窄字符串。默认情况下,它使用系统编码(可能类似于ISO-8859-1)来执行此操作。
所以你得到了错误,因为在已经编码的字符串上调用encode是没有意义的。如果你摆脱str(),它应该工作。
答案 3 :(得分:0)
确保varchar字段中没有奇数个字节;当有人用阿拉伯语输入长字符串时,我有一个varchar(255)爆炸了。然后我得到了“意外的数据结束”错误(正如人们所预料的那样......!)