Python学习 Day18 字符串编码转换

字符串编码转换

(一)编码演进过程

(1)ASCII码:美国标准信息交换码

  • 编码内容:10个数字,26个英文字母的大小写形式和其他一些字符
  • ASCII码最多只能表示256个字符,每个字符占据一个字节

(2)GBK和GB2312:我国制定的中文编码标准

  • 使用一个字节表示英文,两个字节表示汉字

(3)UTF-8:国际通用编码

  • 对群世界所有国家需要用到的字符都进行了编码
  • 用一个字节表示英文字符,三个字节表示中文字符
  • 在Python3中默认使用UTF-8编码,很好地解决来中文乱码问题

(二)Python中常用字符串类型

(1)str:表示Unicode字符(ASCII编码或其他)
(2)bytes:表示二进制数据(包括编码的文本)

  • bytes类型的数据是带有b前缀的字符串(用单引号或双引号表示),例 b’\xd2\xb0’ ,b’mr’

  • 这两种类型的字符串不能拼接在一起使用

  • 通常情况下,str在内存中以Unicode表示,一个字符对应若干个字节,但是如果在网络上传输,或者保存到磁盘上,需要将str类型转换为bytes类型

  • str和bytes之间通过encode()和decode()方法进行转换

(三)编码与解码

(1)使用encode()方法编码

  • encode()方式:将str类型的字符串转换为二进制数据
  • 语法:
  • str.encode([encoding=‘utf-8’[,errors=‘strict’])
  • str:表示要进行转换的字符串
  • encoding=‘utf-8’:可选参数,用于指定进行编码时采用的字符编码,默认为UTF-8,也可使用其他编码,如简体中文(GB2312),当只有这一个参数时,可以只写编码
  • errors=‘strict’:可选参数,用于指定错误处理方式,可选择值有:
  • strict(默认):遇到非法字符就抛出异常
  • ignore:忽略非法字符
  • replace:用“?”代替非法字符
  • xmlcharrefreplace:使用XML的字符引用
verse='野渡无人舟自横'
#采用GBK编码转换为二进制数据,不处理异常
byte1=verse.encode('gbk')
#采用UTF-8编码转换为二进制数据,不处理异常
byte2=verse.encode('utf-8')
print('原字符串:',verse)
print('采用GBK编码转换后的字符串:',byte1)
print('采用UTF-8编码转换后的字符串:',byte2)

原字符串: 野渡无人舟自横
采用GBK编码转换后的字符串: b'\xd2\xb0\xb6\xc9\xce\xde\xc8\xcb\xd6\xdb\xd7\xd4\xba\xe1'
采用UTF-8编码转换后的字符串: b'\xe9\x87\x8e\xe6\xb8\xa1\xe6\x97\xa0\xe4\xba\xba\xe8\x88\x9f\xe8\x87\xaa\xe6\xa8\xaa'

进程已结束,退出代码0

(2)使用decode()方法解码

  • decode()方法:用于将二进制数据转换为字符串,用于将encode()方法转换的结果再次转换为字符串
  • 语法:
  • bytes.decode([encoding=‘utf-8’[,errors=‘strict’])
  • bytes:要进行转换的二进制数据,tongch是encode()方法转换的结果
  • encoding=‘utf-8’:可选参数,用于指定进行解码时采用的字符编码,默认为UTF-8,也可使用其他编码,如简体中文(GB2312),当只有这一个参数时,可以只写编码
  • errors=‘strict’:可选参数,用于指定错误处理方式,可选择值有:
  • strict(默认):遇到非法字符就抛出异常
  • ignore:忽略非法字符
  • replace:用“?”代替非法字符
  • xmlcharrefreplace:使用XML的字符引用
  • 注意:解码采用的字符编码,需要与编码时采用的字符编码一致
verse='野渡无人舟自横'
#采用GBK编码转换为二进制数据,不处理异常
byte1=verse.encode('gbk')
#采用UTF-8编码转换为二进制数据,不处理异常
byte2=verse.encode('utf-8')
#采用GBK编码解码为字符串数据,不处理异常
str1=byte1.decode('gbk')
#采用UTF-8编码解码为字符串数据,不处理异常
str2=byte2.decode('utf-8')
print('原字符串:',verse)
print('采用GBK编码转换后的字符串:',byte1)
print('采用UTF-8编码转换后的字符串:',byte2)
print('采用GBK编码解码后的字符串:',str1)
print('采用UTF-8编码解码后的字符串:',str2)
原字符串: 野渡无人舟自横
采用GBK编码转换后的字符串: b'\xd2\xb0\xb6\xc9\xce\xde\xc8\xcb\xd6\xdb\xd7\xd4\xba\xe1'
采用UTF-8编码转换后的字符串: b'\xe9\x87\x8e\xe6\xb8\xa1\xe6\x97\xa0\xe4\xba\xba\xe8\x88\x9f\xe8\x87\xaa\xe6\xa8\xaa'
采用GBK编码解码后的字符串: 野渡无人舟自横
采用UTF-8编码解码后的字符串: 野渡无人舟自横

你可能感兴趣的:(Python基础语法)