python 编码
文章目录
【注意】最后更新于 5 年前,文中内容可能已过时,请谨慎使用。
前言
- 最近对
python的编码感觉到很迷,python2和python3的 str bytes 完全不一样。 - 这边记录下各种方式输入的字符串编码,以及各种编码对象的转换备忘。
一、input 函数在各个平台和 python 版本中的变化
1.1 测试代码
| |
1.2. UNIX 下
python2
| |
总结
- 在
python2中raw_input函数把控制台输入的bytes直接拿来了,编码为控制台的指定编码(utf8)。 python2的 <type ‘str’> 就是一个bytes类型, 通过decode可以把str(bytes)转换为unicode(str)。- 至于有
encode不能转换就是因为本身就是str(bytes)无法在转换。还有就是设计问题,否则python3就不用改了。
python3
| |
总结
- 在
python3中的input函数明显做了包装,会把标准输入流中的bytes转换为str也就是python2的unicode。 - 由于本身就是
str(unicode),python3直接去掉了str.decode,很明显这样更符合编程思想。 - 这里这样的做法省去了考虑控制台编码的问题。
1.3. windows 系统
二、编写代码时的字面量
2.1. 测试说明
在代码中的字面量字符串,暂时没有发现平台区别。
2.2. python2
测试代码
| |
执行结果
| |
总结
- 可以明显看出
b""与""在python都是同一种类型<type str>也就是其它语言中的bytes。 - 编码为代码头申明的
#-*- coding=utf8 -*-。
2.3. python3
测试代码
| |
执行结果
| |
总结
- 这里明显看出
str与unicode是同一种类型。 - 由于把字面量字符串转为了
unicode不用在意头部编码申明,也不用管代码文本编码了。 - 在
python3中的字面量bytes只能使用ascii如果想使用其它的只能通过 str.encode(${代码文本编码})。