

The

bytes()函数可以根据某种编码标准将字符串转换为字节流. 第一个参数是字符串,第二个参数是编码规范(必需). 如果第一个参数仅由ASCII代码字符组成(ASCII代码字符是Unicode代码字符的子集),则字节流将直接显示为ASCII代码字符. 如果不是,则根据不同的编码标准进行显示. 在UTF-8编码下,一个人占用三个字节(一个字节是一个8位二进制数,可以用2个十六进制数表示),因此可以将汉字表示为形式. 在unicode编码下,汉字占用2个字节,并且可以用4个十六进制数字表示,因此汉字可以表示为b'\ u0000'.
>>> 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'
byte()函数对应于内置函数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()对字节流进行解码. 所谓编码是将字符串转换为计算机可以理解的字节流,所谓解码是将字节流转换为字符串. 与字节相比,encode()和decode()具有默认的编码格式utf-8python3 编码python3 编码,而byte()必须指定编码格式.
# 字符串编码函数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编码相对应的单个字符.
# 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)) #以下分别求5、9、7、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编码是一致的,但是表示形式有所不同.
本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/jisuanjixue/article-185458-1.html
不干涉
反咬一口啊