2009-08-31 70 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