Python3中str与bytes的转换Python3中bytes/str二分法本文内容针对Python3.8适用字符与Unicode数字之间的转换。字符转Unicode数字>>>ord('A')65>>>hex(ord('A'))'0x41'>>>ord('You')20320>>>hex(ord('You'))'0x4f60'>>>'Hello'.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')hello汉字与gbk十六进制/二进制的转换#汉字转十六进制>>>'hello'.encode('gbk')b'\xc4\xe3\xba\xc3'#十六进制转汉字>>>b'\xc4\xe3\xba\xc3'.decode('gbk')'hello'#汉字转十六进制字符串>>>''.join(['%02X'%xforxin'Hello'.encode('gbk')]).strip()'C4E3BAC3'>>>''.join(['%02X'%xforxin'Hello'.encode('gbk')]).strip()'C4E3BAC3'>>>binascii.b2a_hex('Hello'.encode('gbk')).upper().decode('gbk')'C4E3BAC3'>>>'Hello'.encode('gbk').hex('').upper()'C4E3BAC3'#十六进制字符串转汉字>>>bytes.fromhex('C4E3BAC3').decode('gbk')'hello'>>>bytes.fromhex('C4E3BAC3').decode('gbk')'hello'numberwithhexsystems之间的转换#Numbertohexadecimalstring>>>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数字与二进制的转换#将数字转换为二进制字符String>>>bin(5)'0b101'>>>bin(5)[2:]'101'#将二进制字符串转换为数字>>>int('0b101',2)5>>>int('101',2)5bytesrelated#bytesobjecttohexadecimalstring>>>"%02X"%ord(b'\xff')'FF'>>>b'\xff'.hex().upper()'FF'>>>''.join(["%02X"%iforiinb'\xe4\xbd\xa0\xe5\xa5\xbd'])'E4BDA0E5A5BD'>>>b'\xe4\xbd\xa0\xe5\xa5\xbd'.hex().upper()'E4BDA0E5A5BD'#生成32字节十六进制随机字符串(不可预测)>>>''.join(["%02x"%iforiinos.urandom(32)])2f15c8cc8852bf3e094bf3fa19fe0a6e1b3ba8d13b8c129f5f29fcf1ac968750#bytestoint>>>ord(b'\xff')255#inttobytes>>>bytes([255])b'\xff'bit需要使用第三方包bitarray#Stringto01string(defaultendianisbigendian)>>>arr=bitarray()>>>arr.frombytes('Hello'.encode('utf8'))>>>arr.to01()'111001001011110110100000111001011010010110111101'#01串转字符串>>>bitarray('111001001011110110100000111001011010010110111101').tobytes().decode('utf8')'你好'关于utf8的bom头>>>importcodecs>>>codecs.BOM_UTF8b'\xef\xbb\xbf'>>>len(b'\xef\xbb\xbf')3>>>codecs.BOM_UTF8.decode('utf8')'\ufeff'>>>len('\ufeff')1Python3内置编码Python3有哪些编码:StandardEncodings,PythonSpecificEncodings打印编码和别名:获取Python可以编码的所有编码列表>>>fromencodings.aliasesimportaliases>>>forkinaliases:print('%s:%s'%(k,aliases[k]))验证编码是否有效>>>importcodecs>>>codecs.lookup('utf8')#valid
