python 编码和解码

版权声明:本文为博主原创文章,未经博主允许下请随便转载。 https://blog.csdn.net/god_wen/article/details/78455506

unicode,utf-8什么关系

我们可以简单理解为,所有的字符图像存储在一个数据库中,计算机内存只能存储二进制,所以用二进制表示这些字符在数据库中的地址。这样我们就可以用二进制来表示字符了。unicode就是其中一种映射关系。unicode 是一种统称,旗下有分为UCS-2(16位),UCS-4(32位)。现在计算机操作系统内核都是拥抱UNICODE的,所以字符在内存中都是使用16位unicode码来表示的(16位不够用的时候,可能操作系统就集体更新32位unicode版本的内核了)。然而像英语一共就26个字母,用16位来存储是不是太小题大做了。所以就出现了utf-8这种映射关系。utf-8自动变换二进制长度来节省存储空间。

解码和编码

现在操作系统只认unicode的字符。我utf-8的字符它不认识怎么办,所以就出现了编码和解码的概念。以utf-8举例说明:把unicode字符变成utf-8就是编码,把utf-8变成unicode就是解码。其实解码和编码的本质就是寻找不同字符集之间二进制的映射关系。

coding:utf-8

下面这种预处理语句是干什么的呢

#coding:utf-8

这句话的意思是告诉python我使用的是UTF-8编码的.py文件的,所以python就会用UTF-8来解码.py文件 。当我们保存.py文件时默认时用utf-8保存的,如果我们用ASCII(8位)保存,就会出现如下错误

SyntaxError: Non-ASCII character

python 中的字符串可以用引号括起来。

'中文'
"中文"
'''中文'''

python中的字符编码

python3是全面支持UNICODE的所以我们可以混合写中英文

>>> '中文AB'
'中文AB'

python3.x给我们提供两种书写方式进行编码

  1. 添加b前缀进行ASCII编码。注意不要加入中文
>>> b'ABC'
b'ABC'
>>> b'中文'
  File "<stdin>", line 1
SyntaxError: bytes can only contain ASCII literal characters.

2.通过encode()方法制定编码

>>> 'ABC'.encode('ascii')
b'ABC'
>>> '中文'.encode('utf-8')
b'\xe4\xb8\xad\xe6\x96\x87'
>>> '中文'.encode('ascii')
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)

python中的字符解码

解码使用decode函数

>>> b'ABC'.decode('ascii')
'ABC'
>>> b'\xe4\xb8\xad\xe6\x96\x87'.decode('utf-8')
'中文'

python2.x的unicode(可以不看)

因为python的诞生比UNICODE 还早所以,python2的的字符都是ASCII

	>>> '中文'
	'\xd6\xd0\xce\xc4'
	>>>

那么我们想用UNICODE表示字符串怎么办,python2.7中可以在字符串前加入一个u

扫描二维码关注公众号,回复: 5476817 查看本文章
>>> u'中文'
u'\u4e2d\u6587'

现在我们可以看看如何编码一个字符串

>>> u'中文'.encode('utf-8')#编码成utf-8
'\xe4\xb8\xad\xe6\x96\x87'

反过来呢?

'\xe4\xb8\xad\xe6\x96\x87'
>>> '\xe4\xb8\xad\xe6\x96\x87'.decode('utf-8')#UTF-8解码成UNICODE
u'\u4e2d\u6587'

猜你喜欢

转载自blog.csdn.net/god_wen/article/details/78455506
今日推荐