Python 读取文本文件编码错误解决方案(未知文本文件编码情况下解决方案)

很多情况下我们是这样读取文本文件的:

with open(r‘F:\.Python Project\spidertest1\test\pdd凉席.txt‘, ‘r‘) as f:
text = f.read()
但是如果该文本文件是gbk格式的,那么将会报以下错误:

Traceback (most recent call last):
File "F:/.Python Project/spidertest1/test/MyTest4.py", line 14, in <module>
text = f.read()
UnicodeDecodeError: ‘gbk‘ codec can‘t decode byte 0xa4 in position 1129: illegal multibyte sequence

查了下资料说是添加encoding=‘utf-8‘,这个参数:

with open(r‘F:\.Python Project\spidertest1\test\pdd凉席.txt‘, ‘r‘, encoding=‘utf-8‘) as f:
text = f.read()
但是这种方式治标不治本,原因就在于你根本不知道用户打开的是utf-8的文本文件还是gbk的或者是Unicode的

所以只能采取以下这种办法:

open(‘x:xxxx‘,‘rb‘):

第二个参数为:‘rb‘ 以二进制格式打开一个文件用于只读。这就避免了指定了encoding与文件实际编码不匹配而报错的问题
import chardet

def check_code(text):
adchar = chardet.detect(text)
# 由于windows系统的编码有可能是Windows-1254,打印出来后还是乱码,所以不直接用adchar[‘encoding‘]编码
#if adchar[‘encoding‘] is not None:
# true_text = text.decode(adchar[‘encoding‘], "ignore")
if adchar[‘encoding‘] == ‘gbk‘ or adchar[‘encoding‘] == ‘GBK‘ or adchar[‘encoding‘] == ‘GB2312‘:
true_text = text.decode(‘GB2312‘, "ignore")
else:
true_text = text.decode(‘utf-8‘, "ignore")
return true_text

def read_file_text(file_url):
# 第二个参数为:‘rb‘ 以二进制格式打开一个文件用于只读。这就避免了指定了encoding与文件实际编码不匹配而报错的问题
with open(file_url, ‘rb‘) as f:
file_text = f.read()
file_text = check_code(file_text)
return file_text

原文地址:https://www.cnblogs.com/mashuqi/p/12205144.html

时间: 2024-10-10 10:55:18

Python 读取文本文件编码错误解决方案(未知文本文件编码情况下解决方案)的相关文章

Python读取内容UnicodeDecodeError错误

1.错误现象 环境:Python3.7 描述: 用open方法获取文件句柄: 用read/readlines方法一次读取文件所有内容: 尝试了编码GB2312/GBK/GB18030/UTF-8,发现UnicodeDecodeError报错没有解决. 查看读取的文件.是txt的文件,文件大小30-50MB左右. 用notepad++打开这个文件,发现正常打开,发现编码是GB2312 下面是报错过程: Python 3.7.2 (tags/v3.7.2:9a3ffc0492, Dec 23 201

css在未知高度的情况下实现垂直居中

.img{width:100px;height:110px;display:table-cell;text-align:center;vertical-align:middle;border:1px solid red;overflow:hidden;} "`

关于python读取 json文件 转dict错误问题

晚上到家10点老大突然说有东西解决不了 说python 读取java生成的json文件字符编码 出问题 爬起来开电脑 弄了好久 试过了 with open rb encoding=utf-8等等 还试过了在Linux下尝试 文件强转utf8 以及 在编码一次 encodegbk 然后在编码 encodeutf8 种种都试过了. 发现找问题的方向偏了 最后问同学才知道 重点!!  .json 结尾的 不可以有 注释 有了注释就不是正经的json了 处理方法想到了一种 最笨的拼接字符串 回头微信问老

Python 学习之中的一个:在Mac OS X下基于Sublime Text搭建开发平台包括numpy,scipy

1 前言 Python有许多IDE能够用,官方自己也带了一个,Eclipse也能够. 但我在使用各种IDE之后,发现用Sublime Text是最好用的一个.因此.我都是用Sublime Text来编写Python程序. 那么整个搭建事实上很easy.考虑到接下来要做的是科学研究,我们也同一时候安装numpy.scipy,matplotlib等插件. 2 开发环境 Macbook Pro Mac OS X 10.10 3 Step-by-Step 搭建 Step 1 安装Python 2.7 这

中文系统下,UTF-8编码文本文件读取导致的错误

一.UTF-8编码文件读取导致的错误 有个txt文件,里面内容为: aaa bbb ccc 以UTF-8编码方式打开txt文件,顺序读取,将里面的值放到一个hashset中,并判断aaa是否在在hashset中 class { public static void main(String[] args) { try { HashSet<String> specialCateSet= new HashSet<String>(); FileInputStream a = new Fil

python编码错误

错误: [错误分析]第二个参数必须为类,否则会报TypeError,所以正确的应该是这样的: 但如果第二个参数是类型对象,则不会报上面的错误,是允许的,比如说: +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 错误: [错误分析]这个涉及到调用顺序问题,即解析方法的MRO调用顺序,在Python2.7版本之后,这样调用会报错, 必须是子类先放前面,然后才是父类.如下所示,方不会报错. ++++++++++++++++++++

Python读取中文txt文件错误:UnicodeEncodeError: &#39;gbk&#39; codec can&#39;t encode character

1 with open(file,'r') as f: 2 line=f.readline() 3 i=1 4 while line: 5 line=line.decode('utf-8') 6 print str(i)+": "+line7 line=f.readline() 8 i=i+1 用以上代码读取一个包含中文的txt文件时,在正确地读取并打印了六百多行之后,print str(i)+": "+line这一行报错: UnicodeEncodeError:

python运行显示编码错误

python中运行显示编码错误一般有2种原因: 编码与译码的方式不一致 在编写Python时,当使用中文输出或注释时运行脚本,会提示错误信息: SyntaxError: Non-ASCII character '\xe5' in file ******* [原因] python解释器的默认编码文件是用的ASCII码,而你的python文件中使用了中文等非英语字符. [解决办法] 在Python源文件的最开始一行,加入一句: # coding=UTF-8(等号换为”:“也可以) 注意:等号左右两边

python编码错误的解决办法 SyntaxError: Non-ASCII character &#39;\xe5&#39; in file

[提出问题]. 在编写Python时,当使用中文输出或注释时运行脚本,会提示错误信息: SyntaxError: Non-ASCII character '\xe5' in file ******* ---------------------------------------------------------------------------------------------------------- [分析问题]. -----------------------------------