排查字符集问题时,有的时候发生乱码不知道如何生成的字符,此时就需要通过字节序列来判断该字符是什么。
已知utf8字节序列时,转换为unicode或者gb18030字节序列:
>>> a = b'\xef\xbc\xa1' # 此时a是一个bytes对象
>>> b = a.decode("utf8") #此时b是一个str对象,内部是unicode的编码字节序列,其实是全角的字母字符A
>>> b
'A'
>>> b.encode('unicode_escape') #经过encode函数得到一个bytes对象,它是一个字节序列,长度为6, 第一个是\, 第2个是u, 第3个是f, 以此类推
b'\\uff21'
>>> b.encode("gb18030") #经过encode函数得到一个bytes对象,它是一个字节序列,长度为2,第一个是\xa3, 第2个是\xc1
b'\xa3\xc1'
已知gb18030字节序列时,转换为unicode或者utf8字节序列:
>>> a = b'\xa3\xc1' # 此时a是一个bytes对象
>>> b = a.decode("gb18030") #此时b是一个str对象,内部是unicode的编码字节序列,其实是全角的字母字符A
>>> b
'A'
>>> b.encode('unicode_escape') #经过encode函数得到一个bytes对象,它是一个字节序列,长度为6, 第一个是\, 第2个是u, 第3个是f, 以此类推
b'\\uff21'
>>> b.encode("utf8") #经过encode函数得到一个bytes对象,它是一个字节序列,长度为3,第一个是\xef, 第2个是\xbc, 第3个是\xa1
b'\xef\xbc\xa1'
已知unicode字节序列时,转换为gb18030或者utf8字节序列:
>>> a = b'\\uff21' # 此时a是一个bytes对象
>>> b = a.decode("unicode_escape") #此时b是一个str对象,内部是unicode的编码字节序列,其实是全角的字母字符A
>>> b
'A'
>>> b.encode("gb18030") #经过encode函数得到一个bytes对象,它是一个字节序列,长度为2,第一个是\xa3, 第2个是\xc1
b'\xa3\xc1'
>>> b.encode("utf8") #经过encode函数得到一个bytes对象,它是一个字节序列,长度为3,第一个是\xef, 第2个是\xbc, 第3个是\xa1
b'\xef\xbc\xa1'
标签:编码序列,gb18030,字节,python,bytes,序列,unicode,互转,encode
From: https://www.cnblogs.com/lifewithlight/p/17759234.html