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编码转为其他编码的字符串
# 将utf-8编码的字符串转换为unicode编码
b'test'.decode('utf-8')
# 将unicode编码的test字符串转化为utf-8
'test'.encode('utf-8')
str.decode()===str.decode(sys.getdefaultencoding()).encode()
sys.getdefaultencoding():默认返回python的默认编码
4.修改系统的默认编码
import sys,importlib
importlib.reload(sys)
sys.getdefaultencoding('gbk')
5.应用:subprocess操作系统调用
import subprocess
g = subprocess.Popen("ping www.baidu.com", shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
# 先将gbk解码成unicode, 再重新编码成utf-8
output = g.stdout.read().decode('gbk').encode('utf-8')
#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'
output = g.stdout.read().decode('gbk')
6.unicode编码/解码
"""unicode编码"""
print("测试一下".encode("unicode_escape"))
# b'\\u6d4b\\u8bd5\\u4e00\\u4e0b'
"""unicode解码"""
print(b"\\u6d4b\\u8bd5\\u4e00\\u4e0b".decode("unicode_escape"))
# 测试一下
- 如果tpye(text)是bytes类型:
text.decode('unicode_escape')