博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python常见编码错误集合
阅读量:5083 次
发布时间:2019-06-13

本文共 1708 字,大约阅读时间需要 5 分钟。

  • 错误1:变量加载到内存出现编码错误
文件内容a="中国"print a报错➜  ~ python a.py  File "a.py", line 1SyntaxError: Non-ASCII character '\xe4' in file b.py on line 1, but no encoding declared; see http://python.org/dev/peps/pep-0263/ for details

编译时读取变量a,因为包含中文,无法转化为str(ascii默认编码)存放到内存

磁盘字节串utf-8–>无法转为内存字节串str(ascii)

  • 错误2:str直接encode报错
>>> sys.getdefaultencoding()'ascii'>>> a="中国">>> a.encode("gbk")Traceback (most recent call last):  File "
", line 1, in
UnicodeDecodeError: 'ascii' codec can't decode byte 0xe4 in position 0: ordinal not in range(128)>>> b=u"中国">>> b.encode("gbk")'\xd6\xd0\xb9\xfa'

变量a的类型是str(utf-8字节串),会自动调用decode(默认编码ascii),转为unicode,再调encode

自动decode时报错

  • 错误3:编码相互转换报错
>>> "中国".decode("utf-8").encode("ascii")Traceback (most recent call last):  File "
", line 1, in
UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-1: ordinal not in range(128)>>> "中国".decode("utf-8").encode("gbk")'\xd6\xd0\xb9\xfa'>>> "a".decode("utf-8").encode("ascii")'a'

ascii是utf-8的子集合,小集合转大集合没有问题

大集合转为小集合就报错不支持

  • 错误4:unicode不能再decode
>>> a = "中国">>> b = a.decode("utf-8")>>> bu'\u4e2d\u56fd'>>> b.decode("utf-8")Traceback (most recent call last):  File "
", line 1, in
File "/usr/lib64/python2.7/encodings/utf_8.py", line 16, in decode return codecs.utf_8_decode(input, errors, True)UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-1: ordinal not in range(128)
  • 总结

理解编码错误时,首先要判断str时以什么编码存放在内存中的,然后判断是否符合转换公式(str-(decode)->unicode-(encode)->str)。

判断方法,在python2中用len(str)或者bytes(str)可以判断,中文utf-8占3个字节,gbk占2个字节,ascii占一个字节。

印光大师十念法(胡小林主讲第1集)

此生必看的科学实验-水知道答案

转载于:https://www.cnblogs.com/yongqing/p/9595955.html

你可能感兴趣的文章
JavaFX中ObservableValue类型
查看>>
杭电 1097 A hard puzzle
查看>>
[转载]INFORMIX锁机制及如何剖析其锁申辩(第二部门)
查看>>
Andriod-项目stymqjlb-学习笔记2-原型
查看>>
Web AppDomain
查看>>
JQuery创建规范插件
查看>>
AD 域服务简介(三)- Java 对 AD 域用户的增删改查操作
查看>>
Unity中Text渐变色,和Text间距
查看>>
P4932 浏览器
查看>>
Concurrency Kit 0.2.13 发布,并发工具包
查看>>
SQL Relay 0.50 发布,数据库负载均衡器
查看>>
Infinispan 5.3.0.Alpha1 发布
查看>>
设计模式学习笔记——原型模式(Prototype)
查看>>
算法普林斯顿
查看>>
Struts2之类范围拦截器和方法拦截器
查看>>
模型层(练习)
查看>>
XML解析技术研究(一)
查看>>
Qt 学习之路 :使用 QJson 处理 JSON
查看>>
NPOI操作Excel导入导出
查看>>
angularJS 移动端焦点图
查看>>