Python字符编码笔记

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'))
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值