读取文件时出现“Unicode错误”

时间:2013-05-21 04:32:03

标签: python unicode

这是我在这里发表的第一篇文章,所以我不希望这不是错误的主题或者其他什么,但是我正在编写一个与我正在编写的Python应用程序有点不同寻常的问题。

基本上,我试图让它做的是从文本文件中读取并将其中的一部分插入到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中调用的“列表”),然后使用循环将其分解为多行...但这听起来像是许多不必要的步骤,特别是如果已经存在一个共同的解决方法。所以我很感激如何解决这个特别神秘的问题。

感谢。

1 个答案:

答案 0 :(得分:0)

UTF-8解码器给出的数据不是UTF-8。这就是你得到错误的原因。您需要向我们提供失败的代码和一些数据示例,以准确解释发生的情况。

有问题的字符是Latin-1和CP-1252中的“¿”。也许这是在Windows机器上写的西班牙文本?在这种情况下,请在打开文件时指定编码。