2009-08-31 68 views
1

我有一个问题,读一个txt文件中的MySQL数据库表中插入,TE狙击这个代码:急性拉丁字母:DjangoUnicodeDecodeError

文件包含在第一行:“aclaración

archivo = open('file.txt',"r")
for line in archivo.readlines():
....body = body + line
model = MyModel(body=body)
model.save()

我得到一个DjangoUnicodeDecodeError:在8位

“UTF-8”编解码器不能解码字节:无效数据。您已通过'aclaraci \ xf3n'(类型'str') Unicode错误提示

无法编码/解码的字符串是:araci n。

我试图body.decode('utf-8'),body.decode('latin-1'),body.decode('iso-8859-1')没有解决方案。

你能帮助我吗?任何提示都是合理的:)

回答

5

\xf3的'ó'代码来看,它确实看起来像是在ISO-8859-1(或一些近亲)中编码的数据。所以body.decode('iso-8859-1')应该是一个有效的Unicode字符串(没有指定什么“无解”的意思 - 你得到了什么错误信息,在哪里?);如果你需要的是一个UTF-8编码的字节字符串代替,body.decode('iso-8859-1').encode('utf-8')应该给你一个!

+0

感谢亚历克斯,回答你的问题,在这里:> manage.py壳 的Python 2.5.4(InteractiveConsole) >>> A = 'A' >>>一个 '\ XA0' >>>一个。解码('iso-8859-1')。encode('utf-8') '\ xc2 \ xa0' >>> test = unicode(a) 回溯(最近一次调用最后一次): 文件“”第1行,在 UnicodeDecodeError错误:“ASCII”编解码器不能在位置0解码字节0XA0:顺序不在范围内(128) – panchicore 2009-08-31 18:57:40

+0

在'试验= unicode的(一)'你隐含使用ASCII编解码器,如错误信息很清楚地告诉你,所以当然失败了。如果你知道在ISO-8859-1中编码的a,使用'unicode(a,'iso-8859-1')'。如果您分配了编码/解码序列另一个变量的结果,说B,'的Unicode(B,“utf-8”)'然后会工作。等等,也许你只是调用编码和解码这种方式,而不是分配,然后使用他们的结果......?!记住字符串是不变的,所以方法调用不改变他们:他们返回结果(分配和使用它们 - !)。 – 2009-08-31 19:05:03