编码

编码

一、编码种类 

1. ASCII

  • 基于拉丁字母的一套电脑编码系统
  • 其最多只能用8位来表示(一字节)
Bin(二进制) Dec(十进制) 缩写/字符 解释
01000001 65 A 大写字母A
01100001 97 a 小写字母a

2. GBK

  • 国标码(GB2312)的扩展码
  • 一个字符占用16bit,两字节
  • 最多可容纳2**16 = 65536字符
  • 程序无法跨平台使用

3.  Unicode

  • 万国码,目的把全世界所有国家的文字信息进行编码
  • 一个字符占用32位,四字节

4. UTF-8

  • 可变长度的编码
  • 每个字符占用的字节数不定,根据文字内容进行编码。

不同字符占用字节数:

  • 英文:1字节
  • 欧洲文字:2字节
  • 中文:3字节

二、单位转换

  • 8bit = 1 byte
  • 1024byte = 1KB
  • 1024KB = 1MB
  • 1024MB = 1GB
  • 1024GB = 1TB
  • 1024TB = 1PB
  • 1024PB = 1EB
  • 1024EB = 1ZB
  • 1024ZB = 1YB
  • 1024YB = 1NB
  • 1024NB = 1DB

三、编码和解码

  • python2中默认使用的是ASCII码。所以不支持中文。如果需要在Python2中更改编码。需要在文件的开始编写:
# _*_ encoding:utf-8 _*_

 

  • python3中,内存中使用的是unicode码。

    在python3内存中,在程序运行阶段,使用的是unicode编码。因为unicode是万国码。什么内容都可以进行显示。那么在数据传输和存储时由于unicode比较浪费空间和资源。需要把unicode转存成UTF-8或GBK进行存储。

    编码之后的数据是bytes类型的数据。

1. bytes的表现形式:

  • 英文:英文的表现形式和字符串相差不大,前面多个"b"
  • 中文:中文编码之后的结果根据编码的不同,编码结果也不同,一个中文的UTF-8编码是3个字节,一个GBK的中文编码是2个字节。
a = "hello"
b = "中"

print(a.encode("utf-8"))  # b'hello'
print(b.encode("utf-8"))  # b'\xe4\xb8\xad'
print(b.encode("gbk"))    # b'\xd6\xd0'

 

2.编码和解码

  • encode():编码
  • decode():解码

    以何种编码编码,就须以该种编码解码。否则,解码不成功,得不到想要的内容。

a = "编码"
print(a.encode("utf-8")) # b'\xe7\xbc\x96\xe7\xa0\x81'

b = b'\xe7\xbc\x96\xe7\xa0\x81'
print(b.decode("utf-8"))  # 编码

    不同编码之间的转换:

# GBK 转换成 UTF-8
s = "我是文字"
bs = s.encode("gbk")

# 把GBK转换成unicode,也就是解码
s = bs.decode("gbk")

# 重新编码成UTF-8
bss = s.encode("utf-8")

print(bss)
posted @ 2018-10-18 17:46  Ethan_Y  阅读(370)  评论(0编辑  收藏  举报