前言

最近由于项目需要,需要读取一个含有中文的txt文档,完了还要保存文件。文档之前是由base64编码,导致所有汉字读取显示乱码。项目组把base64废弃之后,先后出现两个错误:
ascii codec can't encode characters in position ordinal not in range 128 UnicodeDecodeError: ‘utf8' codec can't decode byte 0x。
如果对于ascii、unicode和utf-8还不了解的小伙伴,可以看之前的这篇文章关于字符串和编码
那么必须对下面这三个概念有所了解:
那么python的默认编码是什么?
>>> import sys
>>> sys.getdefaultencoding()
'ascii'
>>> reload(sys)
<module 'sys' (built-in)>
>>> sys.setdefaultencoding('utf-8')
>>> sys.getdefaultencoding()
'utf-8'
python的默认编码是ascii,可以通过sys.setdefaultencoding('utf-8')函数设置python的默认编码。
python中可以通过encode和decode的方式改变数据的编码,比如:
>>> u'汉字'
u'\u6c49\u5b57'
>>> u'汉字'.encode('utf-8')
'\xe6\xb1\x89\xe5\xad\x97'
>>> u'汉字'.encode('utf-8').decode('utf-8')
u'\u6c49\u5b57'
我们可以通过这两个函数设置编码。
那么,python中的str是什么类型?
>>> import binascii
>>> '汉字'
'\xba\xba\xd7\xd6'
>>> type('汉字')
<type 'str'>
>>> print binascii.b2a_hex('汉字')
babad7d6
>>> print binascii.b2a_hex(u'汉字')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
UnicodeEncodeError: 'ascii' codec can't encode characters in
position 0-1: ordinal not in range(128)
>>> print binascii.b2a_hex(u'汉字'.encode('utf-8'))
e6b189e5ad97
>>> print binascii.b2a_hex(u'汉字'.encode('gbk'))
babad7d6
binascii是将数据的二进制转换成ascii,上面的解释是:‘汉字'的类型是str,二进制是babad7d6,u‘汉字'是无法转换成ascii,这样就报出了开头的第一个错误。解决办法就是把它.encode(‘utf-8')成str类型。因为我命令行是windows默认的GBK编码,所有u'汉字'.encode(‘gbk')的时候,输出结果和‘汉字'结果一样。
总结一下,python的str实际上是unicode的一种,python的默认编码是ascii,对于非ascii转成ascii的时候都会报错,牢记下面的规则:
还有一种简单的方式,就是在文件头设置编码,可以省去很多麻烦:
import sys
reloads(sys)
sys.setdefaultencoding('utf-8')
对于第二个问题,是在文件读取的时候出的错。utf-8的文件有bom和无bom两种方式,两者的差别好像在bom文件比无bom文件多了一个头,导致以utf-8方式读文件时报错,我先前曾尝试读文件的时候先对有无bom进行判断,跳过bom文件的头,后来失败了,真尴尬~~。
还得上google求助大神,具体的操作方法就是使用codecs库来读文件(我猜这个库就是对文件的头进行检测)。
import codecs codecs.open(file_name, "r",encoding='utf-8', errors='ignore')
对于编码问题,一定要懂得ascii、unicode和utf-8工作原理。
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流。
# python
# 汉字编码转换
# utf8编码汉字
# 查看汉字编码
# Python运行报错UnicodeDecodeError的解决方法
# 解决pyshp UnicodeDecodeError的问题
# 解决编码问题:UnicodeDecodeError: 'utf-8'&
# 可以通过
# 这篇文章
# 转换成
# 文档
# 是在
# 出了
# 第一个
# 是由
# 两种
# 还不
# 把它
# 我们可以
# 这两个
# 大神
# 第二个
# 还得
# 报错
# 我猜
# 这三个
# 解决办法
相关文章:
建站之星如何实现五合一智能建站与营销推广?
巅云智能建站系统:可视化拖拽+多端适配+免费模板一键生成
如何选择靠谱的建站公司加盟品牌?
如何自定义建站之星模板颜色并下载新样式?
Python如何创建带属性的XML节点
如何零基础在云服务器搭建WordPress站点?
制作网站的过程怎么写,用凡科建站如何制作自己的网站?
网站专业制作公司有哪些,做一个公司网站要多少钱?
如何零成本快速生成个人自助网站?
广州顶尖建站服务:企业官网建设与SEO优化一体化方案
香港服务器如何优化才能显著提升网站加载速度?
建站之星如何助力网站排名飙升?揭秘高效技巧
高防服务器租用首荐平台,企业级优惠套餐快速部署
如何选择服务器才能高效搭建专属网站?
制作网站怎么制作,*游戏网站怎么搭建?
如何在Golang中指定模块版本_使用go.mod控制版本号
山东云建站价格为何差异显著?
焦点电影公司作品,电影焦点结局是什么?
建站主机无法访问?如何排查域名与服务器问题
香港服务器选型指南:免备案配置与高效建站方案解析
简历在线制作网站免费,免费下载个人简历的网站是哪些?
建站主机服务器选购指南:轻量应用与VPS配置解析
制作门户网站的参考文献在哪,小说网站怎么建立?
高性能网站服务器配置指南:安全稳定与高效建站核心方案
公司门户网站制作公司有哪些,怎样使用wordpress制作一个企业网站?
独立制作一个网站多少钱,建立网站需要花多少钱?
如何通过远程VPS快速搭建个人网站?
哈尔滨网站建设策划,哈尔滨电工证查询网站?
网站好制作吗知乎,网站开发好学吗?有什么技巧?
东莞市网站制作公司有哪些,东莞找工作用什么网站好?
高端网站建设与定制开发一站式解决方案 中企动力
建站IDE高效指南:快速搭建+SEO优化+自适应模板全解析
北京网站制作公司哪家好一点,北京租房网站有哪些?
如何在阿里云虚拟主机上快速搭建个人网站?
建站之星备案流程有哪些注意事项?
网站视频制作书签怎么做,ie浏览器怎么将网站固定在书签工具栏?
义乌企业网站制作公司,请问义乌比较好的批发小商品的网站是什么?
宠物网站制作html代码,有没有专门介绍宠物如何养的网站啊?
如何高效利用亚马逊云主机搭建企业网站?
盘锦网站制作公司,盘锦大洼有多少5G网站?
广州营销型建站服务商推荐:技术优势与SEO优化解析
公众号网站制作网页,微信公众号怎么制作?
零基础网站服务器架设实战:轻量应用与域名解析配置指南
建站主机如何选?性能与价格怎样平衡?
C++中的Pimpl idiom是什么,有什么好处?(隐藏实现)
学校免费自助建站系统:智能生成+拖拽设计+多端适配
零服务器AI建站解决方案:快速部署与云端平台低成本实践
如何正确选择百度移动适配建站域名?
济南专业网站制作公司,济南信息工程学校怎么样?
手机网站制作与建设方案,手机网站如何建设?
*请认真填写需求信息,我们会在24小时内与您取得联系。