ord()函数与chr()函数
# 求字符的ASCII数值或Unicode数值
>>> ord('A')
65
>>> ord('a')
97
>>> ord('码')
30721
# 求ASCII数值或Unicode数值的对应字符
>>> chr(97)
'a'
>>> chr(200)
'È'
>>> chr(30721)
'码'
编码与解码
把文件存储到媒介或在网络上传输时,需要将其转换成字节编码
# 编码
>>> s1 = 'Python'
# 以ASCII编码将字符串编码
>>> s1.encode('ASCII')
b'Python'
>>> s2 = '编码'
>>> s2.encode('ASCII')
Traceback (most recent call last):
File "<pyshell#10>", line 1, in <module>
s2.encode('ASCII')
UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-1: ordinal not in range(128)
>>> s2.encode('UTF-8')
b'\xe7\xbc\x96\xe7\xa0\x81'
>>> s2.encode('UTF-16')
b'\xff\xfe\x16\x7f\x01x'
# 若不指定编码类型则默认采用utf-8编码
>>> s2.encode()
b'\xe7\xbc\x96\xe7\xa0\x81'
# 解码
>>> b1 = b'\xe7\xbc\x96\xe7\xa0\x81'
># 前面的b表示其为字节类型
>>> type(b1)
<class 'bytes'>
>>> b1.decode('utf-8')
'编码'
>>> b1.decode('utf-16')
'볧\ue796膠'
字节bytes对象
有三种方法可以得到字节类型对象,第一种是直接在字符串前加‘b’声明,但这种方法只能局限于ASCII编码内的字符
>>> b = b'abc'
>>> type(b)
<class 'bytes'>
>>> b
b'abc'
>>> b = b'爬虫学习'
SyntaxError: bytes can only contain ASCII literal characters.
第二种方法是使用构造函数bytes()
>>> bytes('abc', 'ascii')
b'abc'
>>> bytes('爬虫学习', 'utf-8')
b'\xe7\x88\xac\xe8\x99\xab\xe5\xad\xa6\xe4\xb9\xa0'
第三种是使用字符串类型的encode()方法
>>> s1 = 'abc'
>>> s2 = '爬虫学习'
>>> s1.encode()
b'abc'
>>> s2.encode()
b'\xe7\x88\xac\xe8\x99\xab\xe5\xad\xa6\xe4\xb9\xa0'
字节类型对象不支持原位改变赋值
>>> b
b'abc'
>>> b[0]
97
>>> b[0] = 98
Traceback (most recent call last):
File "<pyshell#12>", line 1, in <module>
b[0] = 98
TypeError: 'bytes' object does not support item assignment
字节数组bytearray
字节数组bytearray比字节类型更灵活,支持原位改变及追加等功能
# 以utf-8格式将字符串转换成字节数组
>>> ba = bytearray('abc', 'utf-8')
>>> type(ba)
<class 'bytearray'>
>>> ba
bytearray(b'abc')
>>> ba[0]
97
>>> ba[0] = 98
>>> ba
bytearray(b'bbc')
>>> ba.append(100)
>>> ba
bytearray(b'bbcd')
>>> ba + b'e'
bytearray(b'bbcde')
>>> ba
bytearray(b'bbcd')
# 不能追加超出0~256范围的字符
>>> ba.append(2000)
Traceback (most recent call last):
File "<pyshell#20>", line 1, in <module>
ba.append(2000)
ValueError: byte must be in range(0, 256)
# 字符数组的解码
>>> ba.decode('utf-8')
'bbcd'
读取csv中文为乱码
csv_file = csv.reader(open(path1,"r"))
for line in csv_file:
print(line[0].decode('GB2312'))# 指定解码方式为GB2312
list.append(line[0].decode('GB2312').encode('utf-8'))