python open gbk_python3 open txt的UnicodeDecodeError: 'gbk' codec问题解决方案
python3 open txt的UnicodeDecodeError: 'gbk' codec问题解决方案
先直截了当给出解决方案,在程序开头加上:
import _locale
_locale._getdefaultlocale = (lambda *args: ['zh_CN', 'utf8'])
12
分析
在Windows下经常用python open函数的人相信都遇到过UnicodeDecodeError: ‘gbk’ codec…这种编码问题。而且很多有经验的人应该知道解决方法是加上参数encoding=“utf-8”,因为"utf-8"是更通用的编码:
open("test.txt",encoding="utf-8")
然而这样的解决方法也有一些问题:
有多个open的情况下,必须手动一个个添加参数,很麻烦
更致命的是,当引用的第三方库中的open没有加上这个参数时,我们就几乎完全束手无策了(勇士可以尝试修改源码再重装)
我正是因为碰到了第二种情况,于是下定决心找一个一劳永逸的方法解决问题,这就要对原理做一些深入探究。
Python 和 encoding 相关的配置主要有下面几个:
locale.getpreferredencoding() 这个用的是最广的。 这是 Python 在 open 文件时默认使用的 encoding
sys.getdefaultencoding() 是 Python 进行 str/unicode(byte/str) 转换时默认使用的 encoding
sys.getfilesystemencoding() 是用来 encoding 文件名的, 例如 open(b’balabala’)
标准输入输出(print)的 encoding:
4.1 若设置了 PYTHONIOENCODING 环境变量, 则以次变量为准
4.2 标准输入输出是打到终端的话, 看终端的 locale 配置, 在 windows cmd 的代码页
4.3 标准输入输出被重定向到文件的话, 则参照 1 , 用的是 ` locale.getpreferredencoding()
----出自:http://neue.v2ex.com/t/271999
所以我们的目标是要修改环境配置,python解释器会取_getdefaultlocale()[1]作为默认编码类型。
所以我们采用:
import _locale
_locale._getdefaultlocale = (lambda *args: ['zh_CN', 'utf8'])
12
重写函数后,会改变当前运行环境下的所有模块的默认编码。
感谢在 https://juejin.im/post/5bd2b6d5e51d45735c3c0453 找到的解决方案
—————————
尝试用Python写一个Wordcloud的时候,出现了编码问题。
照着网上某些博客的说法添添改改后,结果是变成了“UnicodeDecodeError: ‘utf-8’ codec can’t decode byte…”这个错误。
捣鼓了一天啊,TXT(此处为本人现下内心表情)。最后,干脆写个最简单的文件读取,竟然还是报错。于是就考虑是不是txt的编码问题,因为读取的txt文件是在Mac上面新建的纯文本文件,一时没找到在哪里查看编码,最后拷贝到Windows系统上,查看了txt文件的编码,竟然是ASCII,不是我最爱的utf-8,Mac你辜负了我对你的一番信任啊!ε(┬┬﹏┬┬)3
解决方法
将txt文件的编码格式改为utf-8即可
此外,在打开文件的时候,要加上第三个参数encoding=‘utf8’(没有横杠)。
with open('./test3.txt','r',encoding='utf8') as fin:
for line in fin.readlines():
line = line.strip('\n')
123
下面附上第一次成功显示的词云的源码(参考网上他人的,注释很详细)
import jieba
import jieba.analyse
from matplotlib import pyplot as plt
from scipy.misc import imread
from wordcloud import WordCloud,STOPWORDS,ImageColorGenerator
# 1.读取数据
with open("./test.txt","r",encoding="utf8") as f:
text = f.read()
# 2.基于 TextRank 算法的关键词抽取,top50
keywords = jieba.analyse.textrank(text, topK=50, withWeight=False, allowPOS=('ns', 'n', 'vn', 'v'))
file = ",".join(keywords)
# 指定中文字体,不然中文显示框框
font = r'./HYQiHei-25J.ttf'
print(file)
# 指定背景图,随意
image = imread('cake.jpg')
wc = WordCloud(
font_path=font,
background_color='white',#背景色
mask=image,#背景图
stopwords=STOPWORDS,#设置停用词
max_words=100,#设置最大文字数
max_font_size=100,#设置最大字体
width=800,
height=1000,
)
#生成词云
image_colors = ImageColorGenerator(image)
wc.generate(file)
# 使用matplotlib,显示词云图
plt.imshow(wc) #显示词云图
plt.axis('off') #关闭坐标轴
plt.show()
# 保存图片
wc.to_file('news.png')
———————
python open gbk_python3 open txt的UnicodeDecodeError: 'gbk' codec问题解决方案相关推荐
- Python——web.py模块错误【UnicodeDecodeError: ‘gbk‘ codec can‘t decode byte 0xab in position 285】解决方案
问题描述 render = web.template.render('templates', base='base') During handling of the above exception, ...
- python读txt文件报错UnicodeDecodeError: ‘gbk‘ codec can‘t decode
python读取文件时提示"UnicodeDecodeError: 'gbk' codec can't decode byte 0x80 in position 205: illegal m ...
- python 读取文件时报错UnicodeDecodeError: ‘gbk‘ codec can‘t decode byte 0xaf
文章目录 UnicodeDecodeError: 'gbk' codec can't decode byte 0xaf in position 63: illegal multibyte sequen ...
- Python报错UnicodeDecodeError: ‘gbk‘ codec can‘t decode byte 0x80 in position 10
Python报错(字节编码gbk) UnicodeDecodeError: 'gbk' codec can't decode byte 0x80 in position 10: illegal mul ...
- 解决Python报错UnicodeDecodeError: 'gbk' codec can't decode byte 0x80 in position 658: illegal multibyte
解决Python报错–UnicodeDecodeError: 'gbk' codec can't decode byte 0x80 in position 658: illegal multibyte ...
- python 读取文件时报错UnicodeDecodeError: 'gbk' codec can't decode byte 0x80 in position 205: illegal multib
python 读取文件时报错UnicodeDecodeError: 'gbk' codec can't decode byte 0x80 in position 205: illegal multib ...
- python打开xml文件报错:UnicodeDecodeError: ‘gbk‘ codec can‘t decode byte 0xb7 in position 58: illegal multi
本篇文章主要讲解,python打开xml文件报错:UnicodeDecodeError: 'gbk' codec can't decode byte 0xb7 in position 58: ille ...
- Python读取文件时出现UnicodeDecodeError: ‘gbk‘ codec can‘t decode byte 0x80 in position xx: 解决方案
Python读取文件时出现UnicodeDecodeError: 'gbk' codec can't decode byte 0x80 in position xx: 解决方案 参考文章: (1)Py ...
- python报错:UnicodeDecodeError: ‘gbk‘ codec can‘t decode byte 0xa3 in position 48
python报错: UnicodeDecodeError: 'gbk' codec can't decode byte 0xa3 in position 48: illegal multibyte s ...
- 解决Python打开文件报错UnicodeDecodeError: 'gbk' codec can't decode byte
用Python打开文件时报错: UnicodeDecodeError: 'gbk' codec can't decode byte 0x80 in position 10: illegal multi ...
最新文章
- 使用自变分原理改进正则化核回归:通过变分法推导和推广Nadaraya-Watson估计
- 怎么注销笔记本icloud_如何在笔记本电脑或台式机的Web浏览器中在线查看Apple iCloud照片
- C#容量超出了最大容量。
- java 检查进程是否存在
- 【C语言】(数组)C语言字符串中的小写字母转换为大写字母
- bash之read命令
- ajax上传图片springmvc,springmvc ajax上传图片(jquery)
- riot修改服务器,如何修改riot拳头账号所在地区 riot账号改地区教程
- 计算机与汉字+输入速度+云输入法,学拼音打字练习
- 搜题接口API使用 授权使用
- Shiro学习01:使用Shiro实现身份管理和权限验证
- FPS能重塑英雄联盟的辉煌吗?Valorant公测半年有什么优势和不足?
- RAC环境备份归档日志和恢复数据库方法
- 爬取起点小说总排行榜
- vue3代码检查以及格式化配置
- 关于恢复误删Word文档的步骤详解
- python 压缩图片为指定大小
- #智能制造#第一章 智能制造,缘何而起?
- LabVIEW,NI-DAQmx,LabWindows各个版本下载
- MySQL的upsert
热门文章
- steam服务器102修复,分享steam错误代码102的解决方法
- 【DJ-ZBS2 DH-70L两档切换漏电继电器】
- SpreadJS 15.2 英文版-Crack
- native方法在java中介绍及使用图解
- asp.net助学贷款管理系统案例
- Web 字体简介: TTF, OTF, WOFF, EOT SVG
- 斯皮尔曼相关系数范围_Spearman Rank(斯皮尔曼等级)相关系数
- uniapp h5 小程序点击按钮将图片保存到本地
- ubuntu14.04人脸相似度dlib模块和skimage模块安装
- inode对接微软服务器,H3C iNode智能客户端安装指导(Windows)-7.3-5PW102