前言

最近由于项目需要,需要读取一个含有中文的txt文档,完了还要保存文件。文档之前是由base64编码,导致所有汉字读取显示乱码。项目组把base64废弃之后,先后出现两个错误:

如果对于ascii、unicode和utf-8还不了解的小伙伴,可以看之前的这篇文章关于字符串和编码

那么必须对下面这三个概念有所了解:

ascii只能表示数字、英文字母和一些特殊符号,不能表示汉字

unicode和utf-8都可以表示汉字,unicode是固定长度,utf-8是可变长度

内存中存储方式一般为unicode,而磁盘文件存储方式一般为utf-8,因为utf-8可以节约存储空间

那么python的默认编码是什么?

python的默认编码是ascii,可以通过sys.setdefaultencoding('utf-8')函数设置python的默认编码。

python中可以通过encode和decode的方式改变数据的编码,比如:

我们可以通过这两个函数设置编码。

那么,python中的str是什么类型?

binascii是将数据的二进制转换成ascii,上面的解释是:‘汉字'的类型是str,二进制是babad7d6,u‘汉字'是无法转换成ascii,这样就报出了开头的第一个错误。解决办法就是把它.encode(‘utf-8')成str类型。因为我命令行是windows默认的GBK编码,所有u'汉字'.encode(‘gbk')的时候,输出结果和‘汉字'结果一样。

总结一下,python的str实际上是unicode的一种,python的默认编码是ascii,对于非ascii转成ascii的时候都会报错,牢记下面的规则:

unicode => encode(‘合适的编码') => str

str => decode(‘合适的编码') => unicode

还有一种简单的方式,就是在文件头设置编码,可以省去很多麻烦:

对于第二个问题,是在文件读取的时候出的错。utf-8的文件有bom和无bom两种方式,两者的差别好像在bom文件比无bom文件多了一个头,导致以utf-8方式读文件时报错,我先前曾尝试读文件的时候先对有无bom进行判断,跳过bom文件的头,后来失败了,真尴尬~~。

还得上google求助大神,具体的操作方法就是使用codecs库来读文件(我猜这个库就是对文件的头进行检测)。

对于编码问题,一定要懂得ascii、unicode和utf-8工作原理。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流。

原文链接:http://yuren.space/blog/2016/07/31/python如何解决汉字编码问题/

python汉字编码错误_python解决汉字编码问题:Unicode Decode Error相关推荐

  1. python module错误_python 解决方法:ImportError: No module

    前言:需要安装oracle模块,链接oracle操作:但是服务器没有联网,只能下载tgz包自行安装: 错误:sudo root权限后,进行安装,root用户下可以正常引用:import c x_Ora ...

  2. Python编码错误的解决办法SyntaxError: Non-ASCII character ‘\xe5‘ in file

    Python编码错误的解决办法SyntaxError: Non-ASCII character '\xe5' in file  [现象] 在编写Python时,当使用中文输出或注释时运行脚本,会提示错 ...

  3. python汉字的unicode编码_python解决汉字编码问题:Unicode Decode Error

    前言 最近由于项目需要,需要读取一个含有中文的txt文档,完了还要保存文件.文档之前是由base64编码,导致所有汉字读取显示乱码.项目组把base64废弃之后,先后出现两个错误: ascii cod ...

  4. max图像io错误_解决3dmax软件出现IO error错误异常的有效方法

    3dmax出现IO error错误该怎么办?大家在使用3dmax软件时有没有遇到过出现IO error错误异常的情况,本文小编将要和大家分享解决3dmax软件出现IO error错误异常的有效方法.有 ...

  5. python汉字编码错误_python文件以错误的编码utf8加载

    我对编程相当陌生,我不理解我得到的这个错误消息,file was loaded in the wrong encoding utf-8或者它不是代码中的错误消息,但是我在我的新的.txt文件中得到了它 ...

  6. python汉字编码错误_python爬虫中文编码的问题?

    [流量预警,6张图] 初步分析了下,应该是用了自定义字体.以前没怎么见过,只听别人说过, 很好奇,就分析了以下,还是很好破的,请看我的分析过程: 首先,看网页源码: 这种形式应该是字符的某种编码,和字 ...

  7. python下载源_python解决使用镜像源来安装包

    一.问题 在进行python包安装的时候出现一个问题就是无法进行安装,且出现了如下的错误 报错代码 Retrying (Retry(total=4, connect=None, read=None, ...

  8. R语言添加Python模块错误的解决方法

    使用R Studio添加Python包pytdx时,使用reticulate(R包)中import来导入已下载好的pytdx(Python包) pip install pytdx # 先在终端中下载p ...

  9. python runtime错误_python出现RuntimeError错误

    runtimeerror,python出现RuntimeError错误 RuntimeError: An attempt has been made to start a new process be ...

最新文章

  1. cent 8.0 安装tomcat 9.0_JDK-TOMCAT-MYSQL安装
  2. mysql加入用户_Mysql 添加用户
  3. 《编译原理》第二章知识点
  4. c++ static allocator
  5. keynote使用手册_如何使用Keynote和智能手机为AR创建原型
  6. Kubernetes-native 弹性分布式深度学习系统
  7. SQL SERVER 数据库导入,导出之Bcp命令示例
  8. 盘点企业更换邮件服务器原因
  9. C语言小游戏——扫雷
  10. ~蓝杰那些事儿~2014.06.21.~胡先生和魏小姐的故事
  11. 最新!SPDK宣布在NVMe-oF Fabrics中支持TCP transport
  12. 目前为止学习过的循环解析过程
  13. Zeppelin集成Spark3
  14. 未来的世界是,方向比努力重要,能力比知识重要,健康比成绩重要,生活比文凭重要,情商比智商重要!
  15. Vue 接入腾讯云【实时音视频】TRTC
  16. 【wxPython】wxPython之窗口操作
  17. Django-rest-framework框架之APIView与序列化详解
  18. python爬虫实战之百度新闻爬取
  19. 瑞萨R78族Flash读写操作详细探讨
  20. 4.15Web前端笔试题

热门文章

  1. RHEL 5服务篇—修改MySQl数据库root密码的几种方式
  2. List循环添加对象时遇到问题的解决
  3. python文件的基础操作
  4. linux下gdb所有实用方法
  5. OkHttp源码分析
  6. Fastlane实战(一):移动开发自动化之道
  7. Nimbus/Supervisor本地目录结构
  8. RequireJS示例
  9. 第十五章 动态规划——最优二叉搜索树
  10. IP地址 DNS DHCP 路由器 NAT