在学习tkinter库时,自己码了一个简单的文件搜索GUI。具体功能是输入关键字、文件类型和所要搜索的文件夹路径,按下搜索按钮能将相关的文件的绝对路径添加到列表上,双击列表所选项能够打开一个包含文件内容的可编辑窗口。

文件搜索GUI

在测试GUI时,发现某些文本文件无法读取,出现报错。具体为:

当执行到如下语句时f = open('/Users/gy/Desktop/自动化1404荣誉称号.txt','r')   #以可读模式打开文件

str1 = f.read()  #读取文件内容

出现报错:

出现编码错误

意思就是使用utf-8编码方式读取不了文件里的内容。

这时候,需要查看一下自动化1404荣誉称号.txt文件使用采用何种编码方式存储。

ISO 8859-1

原来自动化1404荣誉称号.txt文件是采用ISO 8859-1编码方式存储的。

ISO 8859-1属于单字节编码,是没有中文对应的编码,但可以用ISO 8859-1编码来"表示"中文。那么问题来了,为什么这个文件的内容几乎都是中文,但能用ISO 8859-1编码方式来存储呢?

然而GBK编码和utf-8编码都支持中文编码。那么按我的理解,如果一个文件包含中文,这个文件应该是刚刚讲到的两种编码方式之一,而不应该是ISO 8859-1。一般来说,采用GBK方式编码一个中文字用两个字节来表示,采用GBK方式编码一个中文字用三个字节来表示。

GBK英文数字的字符编码规则跟ISO 8859-1是一样的,所以GBK是兼容ISO 8859-1编码的,这两者可以相互转换。

既然读取不了自动化1404荣誉称号.txt文件内容,这时用读取二进制模式打开自动化1404荣誉称号.txt文件,采用GBK编码方式进行解码,得到的Unicode码就能被Python3正确识别。f = open('/Users/gy/Desktop/自动化1404荣誉称号.txt','rb')

str1 = f.read().decode('gbk')

此时执行编写的文件搜索GUI,能够正确打开含有自动化1404荣誉称号.txt文件内容的可编辑窗口。

但是此时文件搜索GUI只能打开以ISO 8859-1方式编码的文件,当遇到以utf-8方式编码的文件时还会报错。

此时可以利用异常处理来解决这个问题。try:

str1 = f.read().decode('utf-8')

print('该文件采用UTF-8编码方式')

except UnicodeDecodeError:

f.seek(0,0) #作用:重新将文件指针指向文件始端,没有这句打开GBK编码的文件会显示空白

str1 = f.read().decode('gbk')

print('该文件采用GBK编码方式')

为了搞清楚为什么带中文的文本文件能够用ISO 8859-1编码存储。

创建了两个不同编码方式的文本文件,分别是文件_GBK.txt采用GBK编码、文件_UTF-8.txt采用utf-8编码。再查询两个文件的编码方式。

文件编码

可以看到文件_UTF-8.txt是采用utf-8方式编码存储的,文件_GBK.txt是采用ISO 8859-1编码存储的。这就解决了为什么带中文的文本文件能够用ISO 8859-1编码存储的疑问,原来当一个文本文件采用GBK进行编码时,它是以ISO8859-1编码存储的。因为GBK是兼容ISO 8859-1编码的,这两者可以相互转换。

python3 读文件 编码_Pyhton3下的ISO8859-1编码文件的读取相关推荐

  1. php用asp文件js,asp下用fso生成js文件的代码

    asp下用fso生成js文件的代码 更新时间:2008年06月24日 23:47:54   作者: asp下使用fso生成js代码的方法 Set fso= Server.CreateObject(&q ...

  2. linux函数删除某文件,Linux环境下用C++删除指定文件

    Linux环境下用C++删除指定文件 "Talk is cheap, show me the code!" #include #include #include #include ...

  3. linux下载大文件失败,Linux下FTP/SFTP传输大文件总是失败的处理办法

    海外服务器,一般延迟都比较高.如果不是China Telecom/China Unicom路由直连,延迟更加的不稳定,甚至长连接会经常闪断.国内跨运营商服务器,没有BGP网关,也同样会发生这样的情况, ...

  4. C语言编译时无法打开文件,在VS2010下编译无法打开包括文件:“GL/glaux.h”: No such file or director...

    最近测试了一个OpenGL的示例程序: #include #include #include "glos.h" void main(void) { auxInitDisplayMo ...

  5. linux系统间拷贝文件,Linux系统下不同机器之间拷贝文件的方法

    在Linux系统下,不同机器上实现文件拷贝 一.将本地文件拷贝到远程机器: scp /home/administrator/news.txt root@192.168.6.129:/etc/squid ...

  6. mac mysql utf 8编码_MacOS下MySQL设置UTF8编码问题

    1,检查默认安装的MySQL的字符集 mysql> show variables like '%char%'; +--------------------------+------------- ...

  7. ubuntu mysql 设置编码_ubuntu下修改mysql默认编码问题

    我的ubuntu的版本是11.10的.myql是5.8的.上次是用源代码cmake默认安装的,默认安装的目录在/usr/local/mysql.因为默认安装,所以server默认的字符集是latin. ...

  8. linux追加SQL结果到文件,RAC环境下误操作将数据文件添加到本地存储

    今天碰到个有意思的事情,有客户在Oracle RAC环境,误操作将新增的数据文件直接创建到了其中一个节点的本地存储上.发现网上去搜的话这种问题还真不少,对应解决方案也各式各样,客户问我选择哪种方案可行 ...

  9. linux用vi写文件内容,Linux下利用vi编辑器创建文件并写入内容 专家详解

    Linux系统作为一款以命令行操作为主的系统,vi编辑器无疑大大扩展了命令行的功能,使用户在命令行下可以进行文件的各种操作,学会vi编辑器的使用无疑是非常必要的.而且vi的使用和vim的使用非常相似, ...

  10. python打不开xls文件,wps下用vba实现合并文件夹中所有excel文件

    python打不开xls文件,用wps下vba解决问题 用了常用的三种python读写xls文件的方法都报错 xlrd openpyxl pandas 原因 解决方法 用vba实现合并文件夹中所有ex ...

最新文章

  1. [Voice communications] 让音乐响起来
  2. 2019牛客多校第三场 F.Planting Trees
  3. php scandir sftp,CentOS 下使用SFTP实现网站自动生成FTP账号,实现Chroot功能
  4. html页面的css样式、meta最常用的最基本最常规的配置参数
  5. python手机版下载-qpython手机版下载
  6. 9,求整数的二进制中1的个数《剑指offer》
  7. 利用c语言编制1个程序,实现对给定语法句子的递归下降分析.,递归下降语法分析 - osc_3ubrwgtm的个人空间 - OSCHINA - 中文开源技术交流社区...
  8. 如你以安全模式启动计算机,如何以安全模式启动计算机?
  9. 计算机应用基础第十一版答案,计算机应用基础试题十一.xls
  10. springboot项目+多个启动类部署到linux服务器上
  11. CTRL键不能使用(非硬件问题)
  12. 站点(e.g. Hexo Blog)提交百度搜索引擎收录实现SEO
  13. 数据通信原理_什么是数据通信?有什么特点?
  14. 给win10平板来个标准USB+充电
  15. Houdini Grain 学习笔记
  16. springcloud gateway
  17. Android RecyclerView之代替ListView与GridView
  18. Filenet成功被英国头部加密货币分析平台CryptoCompare收录
  19. 没钱、没对象,还没车票……这年怎么过?!
  20. html5都能干嘛种花,家里千万不能养的6种花

热门文章

  1. net项目怎么兼容Java_是否能让JAVA 和 .net框架共存
  2. 用python做爬虫看图软件-RandomPicture
  3. 联创宽带上网助手协议的简单分析(二) :identify包的构造
  4. T400 系统安装过程
  5. Apache HttpClient4使用教程
  6. MATLAB(6)GUI应用介绍
  7. 汽车租赁管理系统的设计与实现(JSP+SqlServer在线租车网站)
  8. 【学术技巧】论文答辩,老师会仔细看论文内容吗?
  9. Eclipse解压后打开报错javaw.exe in your current PATH
  10. EChart介绍和使用