這是我在這裏的第一篇文章,所以我不希望這篇文章沒有出現在錯誤的主題或某些內容中,但是我遇到了Python應用程序的一個不常見的問題我在寫。閱讀文件時出現「Unicode error」
基本上,我試圖讓它做的是從文本文件中讀取並將其部分插入到Tkinter文本小部件中。該文本文件包含通常的「\ n」換行符,但是當我運行代碼時,我得到這個奇怪的錯誤,我沒有能夠做出解決方法:
(順便說一句,抱歉,糟糕的設置 - 最多在這裏...不知道如何來解決這個新的代碼進入系統,它似乎「由它自己的規則行事」,並有自己的語法,所以我只是複製/粘貼它下面:
Exception in Tkinter callback
Traceback (most recent call last):
File "C:\Python33\lib\idlelib\run.py", line 107, in main
seq, request = rpc.request_queue.get(block=True, timeout=0.05)
File "C:\Python33\lib\queue.py", line 175, in get
raise Empty
queue.Empty
在處理上述異常期間,發生了另一個異常:
Traceback (most recent call last):
File "C:\Python33\lib\tkinter\__init__.py", line 1442, in __call__
return self.func(*args)
File "C:\Users\Owner\Desktop\Python projects\The Ultimate Joke Book.py", line 89, in search
results.create()
File "C:\Users\Owner\Desktop\Python projects\The Ultimate Joke Book.py", line 31, in create
joke = linecache.getline('Jokes/jokelist.txt',x)
File "C:\Python33\lib\linecache.py", line 15, in getline
lines = getlines(filename, module_globals)
File "C:\Python33\lib\linecache.py", line 41, in getlines
return updatecache(filename, module_globals)
File "C:\Python33\lib\linecache.py", line 127, in updatecache
lines = fp.readlines()
File "C:\Python33\lib\codecs.py", line 300, in decode
(result, consumed) = self._buffer_decode(data, self.errors, final)
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xbf in position 627: invalid start byte
所以導致問題的函數 - 只是在for
循環中使用的「linecache.getline」 - 在文本中沒有「\」時完美工作,但無論出於何種原因,它都不喜歡「\」並啓動「spittin」錯誤。 :/
所以今晚我在「docs」(http://docs.python.org/3/howto/unicode.html)上花了近一個小時,閱讀了unicode的所有歷史和基本概念,但它載入了假定的知識,雖然它對信息有幫助,在概念層面上,似乎在實用信息和潛在解決方案方面做得並不多。
我可以拿出來解決這個令人討厭的小錯誤的唯一解決方案是使用「/ n」來代替並以編程方式將字符串拆分爲一個數組(或稱爲「列表」,因爲它們似乎用Python調用),然後使用一個循環將其分解爲多於一行......但這聽起來像是很多不必要的步驟,特別是如果已經存在常見的解決方法。所以,如果能解決這個特別神祕的問題,我將不勝感激。
謝謝。
除非你解釋你的程序中的哪些代碼行在這些堆棧跟蹤中被提及,否則你不可能得到一個好的答案。 –
'\ xbf'是一個顛倒的問號(UTF-8)。你確定這是問題的'\ n'嗎?文件還有什麼?什麼是文件的編碼?你能提供一個獨立的例子來證明問題嗎? – BrenBarn
@BrenBarn:不,它不是。不過,這是一個拉丁語-1的顛倒問號。 ;-)它是無效的UTF-8,這就是他得到錯誤的原因。 –