问题线索

 
  1. 1

    可以知道的是,文本文件的默认编码并不是utf8。

    我们打开一个文本文件,并点击另存为

  2. 2

    我们在新窗口的编码一栏看到默认编码是ANSI。先不管这个编码是什么编码,但是通过下拉列表我们知道,这种编码不是utf8。

    END

编码测试

 
  1. 1

    对于Python里面的中文显示,我们常常使用utf8和gbk的编码。对于这两种编码笔者就不介绍了,总之都是专门可以处理中文的编码方式啦。

  2. 2

    我们首先对文本文件测试了gbk解码。我们发现,此编码下文本文件内容可以正常显示,但是使用utf8解码,程序出错,抛出decodeError异常

  3. 3

    同样的,我们对Python脚本文件测试了utf8解码。我们发现,此编码下文本文件内容可以正常显示,但是使用gbk解码,中文部分出现乱码

  4. 4

    测试说明,对于文本文件需要使用gbk解码,而对于脚本文件需要utf8解码,也就是说,文本文件是gbk编码的,而脚本则是utf8

    END

解决法一:异常处理

 
  • 我们从上面的编码测试发现,文本文件在使用utf8解码时会抛出异常,所以我们在代码中可以做如下处理——也就是在异常抛出时采用gbk解码

  • 经过测试,发现程序可以满足两种文件正常显示

    END

解决法二:文件类型

 
  • 因为确定是这两种文件,所以可以直接判断文件类型选择对应解码了。经过测试,也成功了。

    END

终极解法:chardet

 
  1.  

    chardet模块可以检测字符编码,应该说是类似问题的终极解决。先安装一下

  2.  

    通过下面代码测试一下两种文件的编码。我们看到,通过chardet模块返回的是一个字典。字典的前一个元素是编码检查的概率,后一个是编码类型

  3.  

    我们看到,文本文件的编码方式是GB2312,而我们上面使用gbk的解码也是可以的,那是因为gb2312是gbk的一个子集(GBK/1、GBK/2是GB2312区域)

  4.  

    现在我们修改一下最终的代码,把这个编码问题解决掉~

Python | 多种编码文件(中文)乱码问题解决的更多相关文章

  1. 【其他】【navicat】【1】navicat导入txt文件中文乱码问题解决

    正文: TXT文件默认编码为ANSI,另存为编码为UTF-8的文本文件即可 备注: 1,一般需要导入的数据都是一张excel表,需要将excel表另存为“文本文件(制表符分隔)(*.txt)”保存类型 ...

  2. python读写csv时中文乱码问题解决办法

    https://www.cnblogs.com/shengulong/p/7097869.html 参考1 参考2 参考3 CSV是英文Comma Separate Values(逗号分隔值)的缩写, ...

  3. Python读取 csv文件中文乱码处理

    需求:按行解析读取csv文件存入关系型数据库——主要是中文字体解析:遇到的问题:直接解析出来的数据为list形式,而且编码格式为unicode;解决问题:前提了解: 中文编码的规则 —— GB2312 ...

  4. MyEclipse/Eclipse中properties文件中文乱码问题解决

    有时候在myeclipse或者eclipse中打开properties文件时会发现其中的中文都是乱码.这是由于当前的properties文件编码格式不支持汉字造成的.当这种情况发生时,我们可以按照以下 ...

  5. python 读取CSV文件 中文乱码

    今天读取一个CSV文件,打印出来,中文显示乱码,原因是编码的缘故,CSV保存是编码格式ANSI,解决办法是以记事本方式打开CSV文件,然后另存为时编码选择UTF-8进行保存即可.

  6. Zip文件中文乱码问题解决方法(MAC->Windows)

    前言: 最近收到的ZIP交互原型,打开查看中文一堆乱码.主要是产品都是高大上啊,用的都是MAC,咱酷毙用的Windows,话说安卓APP,你用MAC搞啥啊.可恨的压缩用的是zip,不是rar之类的.为 ...

  7. Java 读取ANSI文件中文乱码问题解决方式[转]

    第一步:首先判断源文件的编码格式: 按照给定的字符集存储文件时,在文件的最开头的三个字节中就有可能存储着编码信息,所以,基本的原理就是只要读出文件前三个字节,判定这些字节的值,就可以得知其编码的格式. ...

  8. JAVA 写中文字符串到指定文件 中文乱码 问题解决

    之前试过下面代码里面的注释掉的 方法,都不行,后来想到了不如指定编码格式试试,果真可以了. String as= “中文字符”; //byte[] b = as.getBytes(); try{ Fi ...

  9. .net读取xml文件中文乱码问题解决

    读取XML的编码方式Encoding.UTF8 要和<?xml version="1.0" encoding="utf-8"?>的encoding ...

随机推荐

  1. SpringMVC配置实例

    一.SpringMVC概述 MVCII模式实现的框架技术 Model--业务模型(Biz,Dao...) View--jsp及相关的jquery框架技术(easyui) Contraller--Dis ...

  2. SetConsoleWindowInfo 函数--设置控制台窗口的大小和位置

    SetConsoleWindowInfo函数 来源:https://msdn.microsoft.com/en-us/library/windows/desktop/ms686125(v=vs.85) ...

  3. 【RequireJS】requireJS的基础知识

    1. requirejs的优点 1)异步加载依赖的文件 2)管理文件加载顺序 3)管理文件加载的包路径 2. requirejs下载地点 https://github.com/jrburke/requ ...

  4. Oracle和MySQL分组查询GROUP BY

    Oracle和MySQL分组查询GROUP BY 真题1.Oracle和MySQL中的分组(GROUP BY)有什么区别? 答案:Oracle对于GROUP BY是严格的,所有要SELECT出来的字段 ...

  5. UESTC 30 &&HDU 2544最短路【Floyd求解裸题】

    最短路 Time Limit: 5000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submiss ...

  6. C++ STL 优先队列详解

    一.解释: 优先队列是队列的一种,不过它可以按照自定义的一种方式(数据的优先级)来对队列中的数据进行动态的排序,每次的push和pop操作,队列都会动态的调整,以达到我们预期的方式来存储. 例如,将元 ...

  7. input file样式修改,图片预览删除功能

    本篇对input file进行了修改,改成自己需要的样式,类似验证身份上传身份证图片的功能. 效果图如下: 这里主要展示上传预览图片功能,对于删除功能的html及css写的比较粗糙,对于想要精细表现这 ...

  8. mysql获取当前时间,前一天,后一天

    负责的项目中,使用的是mysql数据库,页面上要显示当天所注册人数的数量,获取当前的年月日,我使用的是 CURDATE(), 错误的sql语句 eg:SELECT COUNT(*) FROM USER ...

  9. centos7下nginx安装

    http://www.linuxidc.com/Linux/2016-09/134907.htm 安装所需环境 Nginx 是 C语言 开发,建议在 Linux 上运行,当然,也可以安装 Window ...

  10. HTML 基础学习笔记

    HTML 指超文本标记语言(Hyper Text Markup Language),一种标记语言,用来描述网页的一种语言. 一.HTML 基本结构示意图 1. HTML 标签 (HTML tag),由 ...