• Python3 中 str 与 bytes 的转换:

  • 字符与 Unicode 编号之间的转换

# 字符转 Unicode 编号>>> ord('A')65>>> hex(ord('A'))'0x41'>>> ord('你')20320>>> hex(ord('你'))'0x4f60'>>> '你好'.encode('unicode_escape')b'\\u4f60\\u597d'# Unicode 编号转字符>>> chr(65)'A'>>> chr(0x41)'A'>>> chr(20320)'你'>>> chr(0x4f60)'你'>>> b'\\u4f60\\u597d'.decode(('unicode_escape'))'你好'>>> print(b'\\u4f60\\u597d')b'\\u4f60\\u597d'>>> print(u'\u4f60\u597d')你好
  • 汉字与 gbk 十六进制(二进制)之间的转换。

# 汉字转十六进制>>> '你好'.encode('gbk')b'\xc4\xe3\xba\xc3'# 十六进制转汉字>>> b'\xc4\xe3\xba\xc3'.decode('gbk')'你好'# 汉字转十六进制字符串>>> ''.join( [ '%02X' % x for x in '你好'.encode('gbk') ] ).strip()'C4E3BAC3'>>> ' '.join( [ '%02X' % x for x in '你好'.encode('gbk') ] ).strip()'C4 E3 BA C3'# 十六进制字符串转汉字>>> bytes.fromhex('C4E3BAC3').decode('gbk')'你好'>>> bytes.fromhex('C4 E3 BA C3').decode('gbk')'你好'
  • 数字与十六进制(二进制)之间的转换

# 数字转十六进制字符串>>> hex(21)'0x15'>>> hex(21)[2:]'15'# 十六进制字符串转数字>>> int('0x15', 16)21>>> int('15', 16)21# 数字转八进制字符串>>> oct(21)'0o25'>>> oct(21)[2:]'25'# 八进制字符串转数字>>> int('0o25', 8)21>>> int('25', 8)21# 数字转二进制字符串>>> bin(5)'0b101'>>> bin(5)[2:]'101'# 二进制字符串转数字>>> int('0b101', 2)5>>> int('101', 2)5
  • bytes 相关

# bytes 对象转十六进制字符串>>> "%02X" % ord(b'\xff')'FF'>>>  ''.join(["%02X" % i for i in b'\xe4\xbd\xa0\xe5\xa5\xbd'])'E4BDA0E5A5BD'# bytes 转 int>>> ord(b'\xff')255# int 转 bytes>>> bytes([255])b'\xff'
  • bit 相关(需使用第三方包 )

# 字符串转 01 串(默认 endian 是大端)>>> arr = bitarray()>>> arr.frombytes('你好'.encode('utf8'))>>> arr.to01()'111001001011110110100000111001011010010110111101'# 01 串转字符串>>> bitarray('111001001011110110100000111001011010010110111101').tobytes().decode('utf8')'你好'
  • 关于utf8的bom头。(Python3下)

>>> import codecs>>> codecs.BOM_UTF8b'\xef\xbb\xbf'>>> len(b'\xef\xbb\xbf')3>>> codecs.BOM_UTF8.decode('utf8')'\ufeff'>>> len('\ufeff')1
  • Python3 有哪些编码:、 。

  • 打印编码及别名。()

>>> from encodings.aliases import aliases>>> for k in aliases:	print('%s: %s' % (k, aliases[k]))
  • 验证是不是有效编码。

>>> import codecs>>> codecs.lookup('utf8')    #有效
>>> codecs.lookup('utf-;8')    #有效
>>> codecs.lookup('utf88')    #无效Traceback (most recent call last):  File "
", line 1, in 
    codecs.lookup('utf88')LookupError: unknown encoding: utf88
  • 标准化 encoding。

>>> import encodings>>> encodings.normalize_encoding('utf-;8')'utf_8'

对应 C 代码为: 中的 _Py_normalize_encoding 函数。

  • / 模块中与编码相关的方法。()

import sysimport locale # 当前系统所使用的默认字符编码>>> sys.getdefaultencoding()'utf-8' # 用于转换 Unicode 文件名至系统文件名所使用的编码>>> sys.getfilesystemencoding()'utf-8' # 获取默认的区域设置并返回元组(语言, 编码)>>> locale.getdefaultlocale()('zh_CN', 'cp936') # 返回用户设定的文本数据编码# 文档提到this function only returns a guess>>> locale.getpreferredencoding()'cp936'
  • 字符串反转

>>> line = '0123456789'>>> line[::-1]'9876543210'

【相关阅读】

*** ***