繁体   English   中英

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

[英]“Unicode error” when reading a file

这是我在这里的第一篇文章,所以我不希望这不是一个错误的话题,但是我编写的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”)在文本中没有“ \\”但由于某种原因而不喜欢“ \\”而完美工作开始吐出错误。 :/

因此,今晚我在“文档”( http://docs.python.org/3/howto/unicode.html )上花费了近一个小时,阅读了unicode的所有历史和基本概念,但是其中充满了假设知识,尽管它在纯概念的水平上是有益的,但在实用信息和潜在解决方案方面似乎做得并不多。

为了克服这个烦人的小错误,我唯一想出的解决方案是改用“ / n”并以编程方式将字符串拆分为数组(或在Python中似乎是“列表”的字符串),然后使用循环将其分解为多于1行...但这听起来像是很多不必要的步骤,尤其是如果已经有一个通用的解决方法。 因此,对于在解决这个特别神秘的问题上的见解,我将不胜感激。

谢谢。

已给定UTF-8解码器的数据不是UTF-8。 这就是为什么您得到错误。 您需要给我们提供失败的代码和一些数据示例,以准确说明正在发生的事情。

所讨论的字符在Latin-1和CP-1252中为“¿”。 也许这是在Windows计算机上编写的西班牙语文本? 在这种情况下,请在打开文件时指定编码。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM