1.常见的字符编码:

unicode、utf-8、gbk(windows默认编码)

2.什么是unicode:

它为每种语言中的每个字符设定了统一并且唯一的二进制编码,以满足跨语言、跨平台进行文本转换、处理的要求。Unicode 编码共有三种具体实现,分别为utf-8,utf-16,utf-32,其中utf-8占用一到四个字节,utf-16占用二或四个字节,utf-32占用四个字节[来自百度百科]

3.decode和encode

decode解码:从其他编码解码为unicode
encode编码:将unicode编码转为其他编码的字符串

  1. # 将utf-8编码的字符串转换为unicode编码
  2. b'test'.decode('utf-8')
  3. # 将unicode编码的test字符串转化为utf-8
  4. 'test'.encode('utf-8')

str.decode()===str.decode(sys.getdefaultencoding()).encode()
sys.getdefaultencoding():默认返回python的默认编码

4.修改系统的默认编码

  1. import sys,importlib
  2. importlib.reload(sys)
  3. sys.getdefaultencoding('gbk')

5.应用:subprocess操作系统调用

  1. import subprocess
  2. g = subprocess.Popen("ping www.baidu.com", shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
  3. # 先将gbk解码成unicode, 再重新编码成utf-8
  4. output = g.stdout.read().decode('gbk').encode('utf-8')
  5. #b'\r\n\xe6\xad\xa3\xe5\x9c\xa8 Ping www.a.shifen.com [163.177.151.109] \xe5\x85\xb7\xe6\x9c\x89 32 \xe5\xad\x97\xe8\x8a\x82\xe7\x9a\x84\xe6\x95\xb0\xe6\x8d\xae:\r\n\xe6\x9d\xa5\xe8\x87\xaa 163.177.151.109 \xe7\x9a\x84\xe5\x9b\x9e\xe5\xa4\x8d: \xe5\xad\x97\xe8\x8a\x82=32 \xe6\x97\xb6\xe9\x97\xb4=8ms TTL=56\r\n\xe6\x9d\xa5\xe8\x87\xaa 163.177.151.109 \xe7\x9a\x84\xe5\x9b\x9e\xe5\xa4\x8d: \xe5\xad\x97\xe8\x8a\x82=32 \xe6\x97\xb6\xe9\x97\xb4=10ms TTL=56\r\n\xe6\x9d\xa5\xe8\x87\xaa 163.177.151.109 \xe7\x9a\x84\xe5\x9b\x9e\xe5\xa4\x8d: \xe5\xad\x97\xe8\x8a\x82=32 \xe6\x97\xb6\xe9\x97\xb4=34ms TTL=56\r\n\xe6\x9d\xa5\xe8\x87\xaa 163.177.151.109 \xe7\x9a\x84\xe5\x9b\x9e\xe5\xa4\x8d: \xe5\xad\x97\xe8\x8a\x82=32 \xe6\x97\xb6\xe9\x97\xb4=728ms TTL=56\r\n\r\n163.177.151.109 \xe7\x9a\x84 Ping \xe7\xbb\x9f\xe8\xae\xa1\xe4\xbf\xa1\xe6\x81\xaf:\r\n \xe6\x95\xb0\xe6\x8d\xae\xe5\x8c\x85: \xe5\xb7\xb2\xe5\x8f\x91\xe9\x80\x81 = 4\xef\xbc\x8c\xe5\xb7\xb2\xe6\x8e\xa5\xe6\x94\xb6 = 4\xef\xbc\x8c\xe4\xb8\xa2\xe5\xa4\xb1 = 0 (0% \xe4\xb8\xa2\xe5\xa4\xb1)\xef\xbc\x8c\r\n\xe5\xbe\x80\xe8\xbf\x94\xe8\xa1\x8c\xe7\xa8\x8b\xe7\x9a\x84\xe4\xbc\xb0\xe8\xae\xa1\xe6\x97\xb6\xe9\x97\xb4(\xe4\xbb\xa5\xe6\xaf\xab\xe7\xa7\x92\xe4\xb8\xba\xe5\x8d\x95\xe4\xbd\x8d):\r\n \xe6\x9c\x80\xe7\x9f\xad = 8ms\xef\xbc\x8c\xe6\x9c\x80\xe9\x95\xbf = 728ms\xef\xbc\x8c\xe5\xb9\xb3\xe5\x9d\x87 = 195ms\r\n'
  6. output = g.stdout.read().decode('gbk')

6.unicode编码/解码

  1. """unicode编码"""
  2. print("测试一下".encode("unicode_escape"))
  3. # b'\\u6d4b\\u8bd5\\u4e00\\u4e0b'
  4. """unicode解码"""
  5. print(b"\\u6d4b\\u8bd5\\u4e00\\u4e0b".decode("unicode_escape"))
  6. # 测试一下
  1. 如果tpye(text)是bytes类型:
    1. text.decode('unicode_escape')