Python | 多种编码文件(中文)乱码问题解决
问题线索
- 1
可以知道的是,文本文件的默认编码并不是utf8。
我们打开一个文本文件,并点击另存为

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

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

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

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

- 4
测试说明,对于文本文件需要使用gbk解码,而对于脚本文件需要utf8解码,也就是说,文本文件是gbk编码的,而脚本则是utf8
END
解决法一:异常处理
我们从上面的编码测试发现,文本文件在使用utf8解码时会抛出异常,所以我们在代码中可以做如下处理——也就是在异常抛出时采用gbk解码

经过测试,发现程序可以满足两种文件正常显示
END
解决法二:文件类型
因为确定是这两种文件,所以可以直接判断文件类型选择对应解码了。经过测试,也成功了。

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


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


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

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

Python | 多种编码文件(中文)乱码问题解决的更多相关文章
- 【其他】【navicat】【1】navicat导入txt文件中文乱码问题解决
正文: TXT文件默认编码为ANSI,另存为编码为UTF-8的文本文件即可 备注: 1,一般需要导入的数据都是一张excel表,需要将excel表另存为“文本文件(制表符分隔)(*.txt)”保存类型 ...
- python读写csv时中文乱码问题解决办法
https://www.cnblogs.com/shengulong/p/7097869.html 参考1 参考2 参考3 CSV是英文Comma Separate Values(逗号分隔值)的缩写, ...
- Python读取 csv文件中文乱码处理
需求:按行解析读取csv文件存入关系型数据库——主要是中文字体解析:遇到的问题:直接解析出来的数据为list形式,而且编码格式为unicode;解决问题:前提了解: 中文编码的规则 —— GB2312 ...
- MyEclipse/Eclipse中properties文件中文乱码问题解决
有时候在myeclipse或者eclipse中打开properties文件时会发现其中的中文都是乱码.这是由于当前的properties文件编码格式不支持汉字造成的.当这种情况发生时,我们可以按照以下 ...
- python 读取CSV文件 中文乱码
今天读取一个CSV文件,打印出来,中文显示乱码,原因是编码的缘故,CSV保存是编码格式ANSI,解决办法是以记事本方式打开CSV文件,然后另存为时编码选择UTF-8进行保存即可.
- Zip文件中文乱码问题解决方法(MAC->Windows)
前言: 最近收到的ZIP交互原型,打开查看中文一堆乱码.主要是产品都是高大上啊,用的都是MAC,咱酷毙用的Windows,话说安卓APP,你用MAC搞啥啊.可恨的压缩用的是zip,不是rar之类的.为 ...
- Java 读取ANSI文件中文乱码问题解决方式[转]
第一步:首先判断源文件的编码格式: 按照给定的字符集存储文件时,在文件的最开头的三个字节中就有可能存储着编码信息,所以,基本的原理就是只要读出文件前三个字节,判定这些字节的值,就可以得知其编码的格式. ...
- JAVA 写中文字符串到指定文件 中文乱码 问题解决
之前试过下面代码里面的注释掉的 方法,都不行,后来想到了不如指定编码格式试试,果真可以了. String as= “中文字符”; //byte[] b = as.getBytes(); try{ Fi ...
- .net读取xml文件中文乱码问题解决
读取XML的编码方式Encoding.UTF8 要和<?xml version="1.0" encoding="utf-8"?>的encoding ...
随机推荐
- log4go的全局封装Wrapper和标准log库函数的兼容
方便易用的全局函数 大多数时候,只不过是写一个简单的测试程序.例如: package main import ( "log" ) func main(){ log.Fatal(&q ...
- linux+windows mysql导入导出sql文件
linux下 一.导出数据库用mysqldump命令(注意mysql的安装路径,即此命令的路径):1.导出数据和表结构:mysqldump -u用户名 -p密码 数据库名 > 数据库名.sql# ...
- React 实践项目 (五)
React在Github上已经有接近70000的 star 数了,是目前最热门的前端框架.而我学习React也有一段时间了,现在就开始用 React+Redux 进行实战! React 实践项目 (一 ...
- margin属性的正负值确定
margin属性用来使用设置外边距,大多数情况使用正值,但是一些稍复杂的定位就会使用到负值,所以对margin属性的正负值理解是有必要的,本文同时解释了margin-right和margin-bott ...
- readelf相关命令
-a --all 显示全部信息,等价于 -h -l -S -s -r -d -V -A -I. -h --file-header 显示elf文件开始的文件头信息. -l --program-heade ...
- 灵玖软件NLPIRParser智能文本聚类
随着互联网的迅猛发展,信息的爆炸式增加,信息超载问题变的越来越严重,信息的更新率也越来越高,用户在信息海洋里查找信息就像大海捞针一样.搜索引擎服务应运而生,在一定程度上满足了用户查找信息的需要.然而互 ...
- 【整理】01. jQuery.Form.js 用法分析
前言: 为什么使用JQuery.From.js,因为原生<form>表单没有回调函数,不过可以通过jquery-form.js这个插件来实现回调函数. jQuery.form.js是一个f ...
- python socket.error: [Errno 10054] 解决方法
我用的是python2.7 我搜网上10054错误解决方法的时候发现,大部分文章都是以python3为基础的,对于python2不适用. python socket.error: [Errno 1 ...
- 双向循环链表(C语言描述)(五)
代码清单 // dictionary.h #ifndef __DICTIONARY_H__ #define __DICTIONARY_H__ #include <assert.h> #in ...
- Docker实践 - 安装Docker并在容器里运行tomcat
安装Docker yum install docker 本文使用的系统是centos7,ubuntu使用以下命令 sudo apt-get update sudo apt-get install do ...