python 编码
文章目录
【注意】最后更新于 June 15, 2020,文中内容可能已过时,请谨慎使用。
前言
- 最近对
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(${代码文本编码}
)。