关于Python中中文文本文件使用二进制方式读取后的解码UnicodeDecodeError问题

2023-11-11

最近老猿在进行文件操作的验证测试,发现对于中文文本文件如果使用二进制方式打开,返回的类型是bytes,如果要转换成可读的字符串信息需要进行解码。可是老猿使用decode()或decode(“UTF-8”)解码后报错:
Traceback (most recent call last):
File “<pyshell#24>”, line 3, in
print(“line.decode():”,line.decode())
UnicodeDecodeError: ‘utf-8’ codec can’t decode byte 0xb3 in position 0: invalid start byte
在网上查了一下,发现给出的解决方法复杂还不容易理解。老猿认为这就是个字符集编码的问题,但以前老猿没有学习过字符集编码的相关知识,于是在网上查了相关的资料,具体请见老猿转载的几篇文章:
1、《转:使用DOS命令chcp查看windows操作系统的默认编码以及编码和语言的对应关系》
2、转:浅析windows下字符集和文件编码存储/utf8/gbk
3、《转1:Python字符编码详解》
4、《转2:Python字符编码详解》
5、《转:Python常见字符编码及其之间的转换》

通过以上几篇文章的学习,老猿确认了是由于操作系统默认字符集是’GBK’而不是’UTF-8’导致的,因此文件存储后的编码也是GBK,则解码时调用decode(‘GBK’)或decode(‘GB2312’)就可以解决。
案例:

>>> fp = open(r"c:\temp\test.txt","rb")
>>> for line in fp:
	print("line:",line)
	try:print("line.decode():",line.decode())
	except:print("line.decode() error")
	try:print("line.decode('UTF-8'):",line.decode())
	except:print("line.decode('UTF-8') error")
	print("line.decode('gbk'):",line.decode('GBK'))
	print("line.decode('gb2312'):",line.decode('GB2312'))

	
line: b'\xb3\xfc\xd6\xdd\xce\xf7\xbd\xa7\r\n'
line.decode() error
line.decode('UTF-8') error
line.decode('gbk'): 滁州西涧


line.decode('gb2312'): 滁州西涧


line: b'[\xcc\xc6] \xce\xa4\xd3\xa6\xce\xef\r\n'
line.decode() error
line.decode('UTF-8') error
line.decode('gbk'): [唐] 韦应物


line.decode('gb2312'): [唐] 韦应物


line: b'\xb6\xc0\xc1\xaf\xd3\xc4\xb2\xdd\xbd\xa7\xb1\xdf\xc9\xfa\xa3\xac\xc9\xcf\xd3\xd0\xbb\xc6\xf0\xbf\xc9\xee\xca\xf7\xc3\xf9\xa1\xa3\r\n'
line.decode() error
line.decode('UTF-8') error
line.decode('gbk'): 独怜幽草涧边生,上有黄鹂深树鸣。


line.decode('gb2312'): 独怜幽草涧边生,上有黄鹂深树鸣。


line: b'\xb4\xba\xb3\xb1\xb4\xf8\xd3\xea\xcd\xed\xc0\xb4\xbc\xb1\xa3\xac\xd2\xb0\xb6\xc9\xce\xde\xc8\xcb\xd6\xdb\xd7\xd4\xba\xe1\xa1\xa3'
line.decode() error
line.decode('UTF-8') error
line.decode('gbk'): 春潮带雨晚来急,野渡无人舟自横。
line.decode('gb2312'): 春潮带雨晚来急,野渡无人舟自横。
>>>

老猿Python,跟老猿学Python!
博客地址:https://blog.csdn.net/LaoYuanPython

请大家多多支持,点赞、评论和加关注!谢谢!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

关于Python中中文文本文件使用二进制方式读取后的解码UnicodeDecodeError问题 的相关文章

随机推荐

  • 10行代码学会在 Java 中 压缩 Excel 中的图片

    Spire XLS for Java是专业的Java Excel API 使开发人员无需使用Microsoft Office或Microsoft Excel即可创建 管理 操作 转换和打印Excel工作表 本文介绍如何使用Spire XLS
  • 用Beamer制作幻灯片(卷二 色彩篇)

    在用Beamer类制作幻灯片卷一里讲解了怎么使用Latex的简单的类来制作幻灯片 只是给了基本的怎么制作幻灯片的一个大体框架 但是一个很好的幻灯片远远不止这些功能 beamer的功能还有很多 今天要介绍的内容就是给幻灯片增加一些绚丽的效果
  • 服务器的作用

    服务器的作用 1 服务器就好像是一个电话总台一样 而其他的网络设备就像是公共电话 所有的数据传输都要经过服务器的处理 2 服务器作为一个网络节点 为用户提供数据处理服务 最常见的就是使用服务器为自己搭建一个网站 3 服务器运算能力强 可以长
  • C语言实现一个整型计算器的不同方法

    文章目录 一 实现一个整型计算器 二 运用函数指针数组来实现整型计算器 也就是转移表 三 运用回调函数实现整型计算器 一 实现一个整型计算器 代码如下 include
  • layui显示表格数据的id的两种形式

    1 获取数据库表字段id field id title 用户ID width 100 fixed left align center templet function d return d id 2 templet属性获得id为 title
  • 【大模型】—LangChain开源框架介绍

    大模型 LangChain开源框架介绍 2023年可以说是AI大语言模型发展元年 随着OpenAI的ChatGPT和GPT 4的发布 点燃了人工智能大语言模型的发展浪潮 各大科技公司纷纷推出了自家的大语言模型产品 各国更是将大语言模型的发展
  • springboot 跨域过滤器配置

    添加maven包依赖
  • gbk to utf8 utf8 to gbk

    My Study About My Learn or Study etc GBK和UTF8之间的转换 By Cnangel on October 8 2012 10 10 AM No Comments 关于GBK和UTF 8之间的转换 很多
  • osg学习(七十一)如何给顶点着色器传递顶点数据

    缩放不会影响传递到着色器中顶点坐标缩放 osg会自动向着色器传递osg Vertex osg ModelViewProjectionMatrix等变量 不需要再定义 在着色器中直接使用即可 设置顶点数据 osg Geometry cpp v
  • 2579 启蒙练习-跑步问题

    有二个人在n米的椭圆形的跑道跑步 他们从同一个起点出发 两个人运动方向相同时 每a秒相遇一次 两个人运动方向相反时 每b秒相遇一次 求二人的速度 v1 v2 分别是多少 本题数据保证 n a b v1 v2 都会是整数 收起 输入 三个数
  • SQL Server 基础语法1(超详细!)

    文章目录 创建数据库 增加次要数据库文件 删除次要数据库文件 删除数据库 建立表格 新增列 改变长度 删除表 查询表 删除列 创建数据库 create database school 数据库名 on 数据文件 name school dat
  • SQL Server 基础操作(五)导入和导出数据表

    导入数据表 1 选择需要导数据的数据库右击 任务 导入数据 2 选择数据源 数据源代表数据表从哪里导入到当前的数据库中 填写数据源服务器名称 本地导入 1433 远程导入 IP 1433 3 选择导入的目标数据库 选择导入到那个数据库中 4
  • hive数据仓库课后答案

    第一章 数据仓库的简介 一 填空题 1 数据仓库的目的是构建面向 分析 的集成化数据环境 2 Hive是基于 Hadoop 的一个数据仓库工具 3 数据仓库分为3层 即 源数据层 数据应用层 和数据仓库层 4 数据仓库层可以细分为 明细层
  • k8s部署SpringCloud应用

    一 准备工作 将v2目录上传到 root 目录 下载地址 链接 https pan baidu com s 1oqED4Kew5BeLFqms6U6ISw 提取码 lzx9 springcloud1 项目 用k8s部署 eureka eur
  • (JAVA练习)输入,输出二维数组

    题目 输入 输出二维数组 解答 import java util Scanner public class Erweishuzu public static void main String args 二维数组练习 Scanner sc n
  • element-ui 中dialog居中

    标题element ui 中dialog居中 el dialog display flex flex direction column margin 0 important position absolute top 50 left 50
  • 一款强大的浏览器翻译插件 - 沉浸式的翻译

    起因 前一段时间谷歌翻译宣布跑路 不再对大陆用户提供服务 听闻这一噩耗我不由得心里一惊 燕子 啊不是 谷歌没有你我可咋活呀 对于没太大工作需求 顶多遇上几个不认识单词或需要翻译网页的我来说 Chrome 自带的谷歌翻译可以说是我最常用的翻译
  • micropython源码分析之qstr

    前言 最近在研究micropython的源码编译过程 简单记录下关于qstr部分内容 本篇文章基于micropython1 18版本源码 1 19版本及之后可能会略有差异 标识符与相应对象的联系 Micropython中有很多标识符 例如l
  • 工作笔记:TrueCrypt编译记录

    工作笔记 TrueCrypt编译记录 TrueCrypt的最新版本6 2可以从官方网站上下载 我从这里下载了一个6 1的 http freedos pri ee truecrypt 在TrueCrypt官方网站上很多旧版本都没了 这里却很全
  • 关于Python中中文文本文件使用二进制方式读取后的解码UnicodeDecodeError问题

    最近老猿在进行文件操作的验证测试 发现对于中文文本文件如果使用二进制方式打开 返回的类型是bytes 如果要转换成可读的字符串信息需要进行解码 可是老猿使用decode 或decode UTF 8 解码后报错 Traceback most