bytes()函数能够将字符串按照某一编码规范转换为字节流。其中第一个参数为字符串,第二个参数为编码规范(必填)。若是第一个参数是仅由ascii码字符(ascii码字符是unicode码字符的子集)组成的,则字节流直接以ascii码字符显示。若是不是的话,则在按照不一样的编码规范显示。在utf-8编码下,一个汉子占三个字节(一个字节是8位二进制数,可用2个16进制数表示),因而一个汉字能够表示为b'\x00\x00\x00'的形式。在unicode编码下,一个汉字占2个字节,可用4个16进制数表示,因而一个汉字能够表示为b'\u0000'。python
>>> hw = '好玩' >>> bytes(hw,'utf-8') #utf-8编码 b'\xe5\xa5\xbd\xe7\x8e\xa9' >>> bytes(hw,'unicode-escape') #unicode编码 b'\\u597d\\u73a9' >>> bytes(hw,'gbk') #gbk编码 b'\xba\xc3\xcd\xe6' >>> bytes(hw,'gb2312') #gb2312编码 b'\xba\xc3\xcd\xe6'
与bytes()函数相对应的是内置函数str(),str()函数的一个功能是能将某一编码下的字节流解码为字符串。函数
>>> hw = '好玩' >>> b_utf = bytes(hw,'utf-8') >>> b_utf b'\xe5\xa5\xbd\xe7\x8e\xa9' >>> str(b_utf,'utf-8') '好玩' >>> b_uni = bytes(hw,'unicode-escape') >>> b_uni b'\\u597d\\u73a9' >>> str(b_uni,'unicode-escape') '好玩' >>> b_gbk = bytes(hw,'gbk') >>> b_gbk b'\xba\xc3\xcd\xe6' >>> str(b_gbk,'gbk') '好玩'
python还能够对字符串进行编码和解码,这里的字符串通常是指人类可以识别的具备语义的符号。使用函数encode()进行编码,使用函数decode()对字节流进行解码。所谓编码就是将字符串转换成计算机能读懂的字节流,所谓解码就是将字节流转化成字符串。与bytes相比,encode()和decode()具备默认的编码格式utf-8,而bytes()必须制定编码格式。编码
# 字符串编码函数encode() >>> hw '好玩' >>> hw.encode() b'\xe5\xa5\xbd\xe7\x8e\xa9' >>> hw.encode('utf-8') #因而可知utf-8是默认的编码格式 b'\xe5\xa5\xbd\xe7\x8e\xa9' >>> hw.encode('gbk') b'\xba\xc3\xcd\xe6' >>> hw.encode('unicode-escape') b'\\u597d\\u73a9' >>> hw.encode('gb2312') b'\xba\xc3\xcd\xe6' # 字符串解码函数decode() >>> hw '好玩' >>> hw_d = hw.encode('utf-8') >>> hw_d b'\xe5\xa5\xbd\xe7\x8e\xa9' >>> hw_d.decode() '好玩'
字符经过内置函数ord()与chr()进行编码,ord()能够返回单一字符的Unicode编码,chr()能够返回与Unicode编码相对于的单一字符。code
# ord()函数10进制的形式返回一个字符的Unicode编码 >>> ord('中') 20013 >>> ord('A') 65 >>> ord('9') 57 # chr()函数能够返回各类进制下Unicode编码的字符 # 1)'A'的十进制Unicode编码是65,如下分别将其转化为二进制、八进制、十六进制 >>> bin(65) '0b1000001' >>> oct(65) '0o101' >>> hex(65) '0x41' # 2)利用chr()函数将不一样进制下的Unicode编码转换成Unicode字符,ascii码是Unicode码的子集。 >>> chr(65) 'A' >>> chr(0b1000001) 'A' >>> chr(0o101) 'A' >>> chr(0x41) 'A'
# 经过内置函数bytes()获得'好'的Unicode编码 >>> h = '好' >>> bytes(h,'unicode-escape') b'\\u597d' # 经过内置函数ord()获得'好'的unicode编码的序数形式 >>> ord(h) 22909 # 验证经过bytes()与ord()获得的Unicode编码是否一致 >>> bytes(h,'unicode-escape') b'\\u597d' >>> bin(int('5',16)) #如下分别求五、九、七、d的二进制数 '0b101' >>> bin(int('9',16)) '0b1001' >>> bin(int('7',16)) '0b111' >>> bin(int('d',16)) '0b1101' >>> int('101100101111101',2) #将二进制数拼接起来计算其十进制数 22909
经过以上实验能够获得结论:使用内置函数ord()得到的unicode编码与经过内置函数bytes()得到的unicode编码相一致,只是展示形式不一样而已。utf-8