使用python来对字符编码序列进行互转

发布时间 2023-10-12 12:33:09作者: 写bug的民工

排查字符集问题时,有的时候发生乱码不知道如何生成的字符,此时就需要通过字节序列来判断该字符是什么。

已知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'