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问题解决方案相关推荐

  1. 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, ...

  2. python读txt文件报错UnicodeDecodeError: ‘gbk‘ codec can‘t decode

    python读取文件时提示"UnicodeDecodeError: 'gbk' codec can't decode byte 0x80 in position 205: illegal m ...

  3. python 读取文件时报错UnicodeDecodeError: ‘gbk‘ codec can‘t decode byte 0xaf

    文章目录 UnicodeDecodeError: 'gbk' codec can't decode byte 0xaf in position 63: illegal multibyte sequen ...

  4. 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 ...

  5. 解决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 ...

  6. 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 ...

  7. 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 ...

  8. 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 ...

  9. 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 ...

  10. 解决Python打开文件报错UnicodeDecodeError: 'gbk' codec can't decode byte

    用Python打开文件时报错: UnicodeDecodeError: 'gbk' codec can't decode byte 0x80 in position 10: illegal multi ...

最新文章

  1. 使用自变分原理改进正则化核回归:通过变分法推导和推广Nadaraya-Watson估计
  2. 怎么注销笔记本icloud_如何在笔记本电脑或台式机的Web浏览器中在线查看Apple iCloud照片
  3. C#容量超出了最大容量。
  4. java 检查进程是否存在
  5. 【C语言】(数组)C语言字符串中的小写字母转换为大写字母
  6. bash之read命令
  7. ajax上传图片springmvc,springmvc ajax上传图片(jquery)
  8. riot修改服务器,如何修改riot拳头账号所在地区 riot账号改地区教程
  9. 计算机与汉字+输入速度+云输入法,学拼音打字练习
  10. 搜题接口API使用 授权使用
  11. Shiro学习01:使用Shiro实现身份管理和权限验证
  12. FPS能重塑英雄联盟的辉煌吗?Valorant公测半年有什么优势和不足?
  13. RAC环境备份归档日志和恢复数据库方法
  14. 爬取起点小说总排行榜
  15. vue3代码检查以及格式化配置
  16. 关于恢复误删Word文档的步骤详解
  17. python 压缩图片为指定大小
  18. #智能制造#第一章 智能制造,缘何而起?
  19. LabVIEW,NI-DAQmx,LabWindows各个版本下载
  20. MySQL的upsert

热门文章

  1. steam服务器102修复,分享steam错误代码102的解决方法
  2. 【DJ-ZBS2 DH-70L两档切换漏电继电器】
  3. SpreadJS 15.2 英文版-Crack
  4. native方法在java中介绍及使用图解
  5. asp.net助学贷款管理系统案例
  6. Web 字体简介: TTF, OTF, WOFF, EOT SVG
  7. 斯皮尔曼相关系数范围_Spearman Rank(斯皮尔曼等级)相关系数
  8. uniapp h5 小程序点击按钮将图片保存到本地
  9. ubuntu14.04人脸相似度dlib模块和skimage模块安装
  10. inode对接微软服务器,H3C iNode智能客户端安装指导(Windows)-7.3-5PW102