首页 > 编程语言 >python文件读取错误UnicodeDecodeError: 'utf-8' codec can't decode byte 0x92 in position 884:

python文件读取错误UnicodeDecodeError: 'utf-8' codec can't decode byte 0x92 in position 884:

时间:2022-09-23 21:11:15浏览次数:94  
标签:文件 utf 字节 884 Python UTF8 0x92 byte

参考:

https://segmentfault.com/q/1010000004268196/a-1020000004269556

ubuntu下Python3使用open('filename', 'r').read()读取 .txt 文件时抛出异常:
UnicodeDecodeError: 'utf-8' codec can't decode byte 0x92 in position 66: invalid start byte
当相同语句在Python2下运行时却正常,请问问题出在哪里啊?

0x92 即 10010010,UTF8 中编码一个字符的第一个字节(start byte)只可能是 0xxxxxxx、110xxxxx、1110xxx、11110xxx……而后面的字节只可能是 10xxxxxx。也就是说 0x92 只能作为后面的字节,却出现在了第一个字节的位置。

出现这种问题绝大部分情况是因为文件不是 UTF8 编码的(例如,可能是 GBK 编码的),而系统默认采用 UTF8 解码。解决方法是改为对应的解码方式。

极少数情况是因为文件损坏了或者和一部分非 UTF8 编码混在一起,可以修复文件或采用 replace 等方式解码。

Python 2 没有问题是因为 Python 2 默认以字节流(对应 Python 3 的 bytes)的方式读文件,不像 Python 3 默认解码为 unicode,把读文件的方式改为 rb 有同样的效果,不过 Python 3 中处理 bytes 还可能遇到很多问题就是了……

最后决定,以二进制形式读取,忽略特殊字符造成的转码错误,然后就可以了:

    with open(htmlPath,mode='rb') as f:
        print(f.read().decode('utf8','ignore'))

标签:文件,utf,字节,884,Python,UTF8,0x92,byte
From: https://www.cnblogs.com/zhangdingqu/p/16724380.html

相关文章

  • C#字符串与byte[]相互转换
    string类型转成byte[]:byte[]byteArray=System.Text.Encoding.Default.GetBytes(str);byte[]转成string:stringstr=System.Text.Encoding.Default.GetString(b......
  • 某样本BPF bytecode 学习
    TricephalicHellkeeper:ataleofapassivebackdoor下载链接最近学习ebpf看到篇样本分析"TricephalicHellkeeper:ataleofapassivebackdoor",记录一下隐蔽通信......
  • ByteArrayOutputStream用法---读写类型数据
    ByteArrayOutputStream用法 字节数组流:ByteArrayOutputStream:  可以捕获内存缓冲区的数据,转换成字节数组。ByteArrayoutputStreambout=newByteArrayOutputStr......
  • jdk9为何要将String的底层实现由char[]改成了byte[]
    作者:basic13链接:https://www.zhihu.com/question/447224628/answer/1759986003来源:知乎著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。这个特性是......
  • utf8 转码为gbk
    使用场景:有些培训资料放nginx中,通过浏览器观看,但linux中使用的是utf-8编码,浏览器使用的是gdk编码解决方法:linux中下载convmv包  aptinstallconvmvlinux中创建中文目......
  • 字符编码笔记:ASCII,Unicode 和 UTF-8
    一、ASCII码我们知道,计算机内部,所有信息最终都是一个二进制值。每一个二进制位(bit)有0和1两种状态,因此八个二进制位就可以组合出256种状态,这被称为一个字节(byte)。也就是说......
  • qt报“Error:Could not decode “xxx“ with“UTF-8“
     qt里导入vs里创建的一个包含中文注释的头文件,中文注释显示为乱码,并报错“Error:Couldnotdecode“xxx“with“UTF-8“,editingnotpossible”解决办法:点击文件上......
  • utf8和utf8mb4的区别
     https://blog.csdn.net/grl18840839630/article/details/105597074/ 一、导读我们新建mysql数据库的时候,需要指定数据库的字符集,一般我们都是选择utf8这个字符集,但是......
  • rabbitMQ中将ReadOnlyMemory转换为byte []
    rabbitmq-C#将ReadOnlyMemory转换为byte[]发布于2020-07-3111:16:05给定ReadOnlyMemory结构,我想将流转换为字符串我有以下代码:varbody=ea.Body;//ea.Bod......
  • 实例-rust-string和bytes转换
    Cargo.toml[package]name="rust-example9"version="0.1.0"edition="2021"#Seemorekeysandtheirdefinitionsathttps://doc.rust-lang.org/cargo/refere......