【问题标题】:Python UnicodeDecodeError: 'utf-8' codec can't decode byte 0xff in position 0: invalid start byte [closed]Python UnicodeDecodeError:'utf-8'编解码器无法解码位置0的字节0xff:无效的起始字节[关闭]
【发布时间】:2020-09-05 00:37:07
【问题描述】:

我在使用 python 3.6 的 ubuntu 18.04 上收到此错误:

  File "/home/sw/miniconda3/envs/py36/lib/python3.6/codecs.py", line 644, in __next__
    line = self.readline()
  File "/home/sw/miniconda3/envs/py36/lib/python3.6/codecs.py", line 557, in readline
    data = self.read(readsize, firstline=True)
  File "/home/sw/miniconda3/envs/py36/lib/python3.6/codecs.py", line 503, in read
    newchars, decodedbytes = self.decode(data, self.errors)
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xff in position 0: invalid start byte

我尝试过使用 utf-16、latin1 编码,但没有任何效果。任何帮助表示赞赏。

【问题讨论】:

  • 我假设您正在尝试从文件中读取文本。为什么您认为该文件包含(有意义的)文本?文件来自哪里,来源对编码的要求是什么?当您在十六进制编辑器中查看该文件时,该文件是什么样的?如果您尝试在系统文本编辑器中打开它会怎样?
  • @KarlKnechtel 我可以在文本编辑器中正常阅读文件
  • @SieTw 不,我的意思是,当您open() 文件时,您在什么模式下进行操作?默认为'r',如果您不提供参数,但对于某些文件您想以'rb' 模式打开,因为它们没有正确编码为文本。
  • 是的;这看起来像 mysql 的“ucs2”,表示“我们不能浪费”。

标签: python unicode python-3.6 python-unicode


【解决方案1】:

UTF-16 / ucs2 -- 这些不是有用的编码,除了它们可能来自 Java 或某些 Microsoft Office 产品。 前 2 个字节是“BOM”,您可能必须手动跳过。

目标是告诉 python/mysql/whoever 该文件被编码为“utf-16”或“ucs2”,具体取决于语言可用的内容。

【讨论】:

  • 你能看看superuser.com/questions/1583311/… 现在我可以在终端内阅读,但不能在文件中阅读:(谢谢!
  • "-le" 正确吗?
  • 当我真正使用 utf-16-le 时,我收到此错误:UnicodeDecodeError: 'utf-16-le' codec can't decode bytes in position 7070-7071:illegal UTF-16 surrogate
猜你喜欢
  • 2021-12-01
  • 2016-05-13
  • 2017-07-09
  • 2019-05-07
  • 2018-03-14
  • 2023-04-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多