11

python中字符串的编码和解码

 3 years ago
source link: http://www.cnblogs.com/xm-python/p/14058263.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

1. 常用的编码

  • ASCII:只能表示一些字母,数字和特殊的字符,占一个字节
  • GBK:国家简体中文字符集和繁体字符集,兼容ASCII,占两个字节
  • Unicode:能够表示全世界上所有的字符,Unicode有人说占4个字节也有人说占2个字节,但中文占2个字节
  • UTF-8:Unicode的压缩版,占1~3个字节,其中中文占三个字节

2.补充:计算机表示的单位:

bit: 位,计算机最小的表示单位

bytes:字节,最小的存储单位,1bytes=8bit,1bytes简写成1B

1KB = 1024B

1MB = 1024KB

1GB = 1024MB

1TB = 1024GB

......

3.ASCII编码

ASCII编码是基于拉丁字母一套编码,主要是显示现代英语和其西欧语言,是最早通用的单字节编码系统,具体ASCII对照表如下:

ye6nYzj.png!mobile

在对照表中需要记住的是大写字母A的编码是65,小写字母a的编码的97即可。

在python中可以使用chr和ord方法进行转换:

# 将数字类型转换成ASCII对应的字符
print(chr(97))  # a
# 将数字转换成对应的数据
print(ord("A"))  # 65
# 或者使用

但随着事件的发展,ASCII编码扩展到了256个字符,编码 对照表如下:

Nzmqua2.png!mobile

其中后128个字符称为扩展ASCII码

2.GBK和GB2312编码

由于ASCII编码只能由256个字符组成,然只能由1个字节来表示中文是不可能的,因此制定了GB2312编码,用来表示中文的对照表

4.Unicode

为了解决各个国家编码冲突的问题,Unicode编码就因此而生,Unicode把所有语言都统一到一套编码里面,就会避免冲突,产生乱码。

Unicodeb标准在不断发展,最常用的是用两个字节表示一个字符,也有的字符是4个字节,但是中文是占两个字节。如果统一成Unicode编码,在存储和传输上就不划算

5.UTF-8编码

为了解决Unicode编码存储过大的问题,就推出了可变长编码UTF-8,UTF-8编码把一个Unicode字符依据不同的数据大小编程1~6个字节,其中中文就占3个字节

6.编码和解码

1.编码操作

可以通过encode进行编码,其中语法如下:

  • 对字符串进行ASCII编码(只能转换数字,英文字母和一些符号)
# 方式1: 通过bytes方法
bytes('a', 'ASCII')
# 方式2:  通过encode方法进行
'a'.encode('ASCII')
  • 将字符串转换成gbk编码格式
# 方式1:  通过encode方法进行
print('你好'.encode('GBK'))  # 编码之后的结果为:b'\xc4\xe3\xba\xc3'
# 方式2: 通过bytes类型
print(bytes('我爱你', 'GBK'))  # 编码之后的结果为:b'\xce\xd2\xb0\xae\xc4\xe3'
  • 将字符串转换成Unicode编码格式
# 方式1:  通过encode方法进行
print('你好'.encode('unicode_escape'))  # 编码之后的结果为:b'\\u4f60\\u597d'
# 方式2: 通过bytes类型
print(bytes('我爱你', 'unicode_escape'))  # 编码之后的结果为:b'\\u6211\\u7231\\u4f60'
  • 将字符串转换成UTF-8编码格式
# 方式1:  通过encode方法进行
print('你好'.encode('utf-8'))  # 编码之后的结果为:b'\xe4\xbd\xa0\xe5\xa5\xbd'
# 方式2: 通过bytes类型
print(bytes('我爱你', 'utf-8'))  # 编码之后的结果为:b'\xe6\x88\x91\xe7\x88\xb1\xe4\xbd\xa0'

2.解码操作

  • 将GBK编码格式转换成字符串
# 通过decode方法解码
print(b'\xc4\xe3\xba\xc3\xce\xd2\xb0\xae\xc4\xe3'.decode('GBK'))  # 解码之后结果为:你好我爱你
  • 将UTF-8编码格式转换成字符串
# 通过decode方法解码
print(b'\xe4\xbd\xa0\xe5\xa5\xbd\xe6\x88\x91\xe7\x88\xb1\xe4\xbd\xa0'.decode('utf-8'))  # 解码之后结果为:你好我爱你
  • 将Uniconde编码格式转换成字符串
# 通过decode方法解码
print(b'\\u4f60\\u597d\\u6211\\u7231\\u4f60'.decode('GBK'))  # 解码之后结果为:你好我爱你

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK