这是《ffective Python》的第3个方法,核心内容就是介绍了bytes和str的区别,至于unicode介绍的不是很详细。书中主要内容:
- 用辅助函数来处理编码。
def to_str(bytes_or_str):
if isinstance(bytes_or_str, bytes):
value = bytes_or_str.decode('utf-8')
else:
value = bytes_or_str
return value # Instance of str
def to_bytes(bytes_or_str):
if isinstance(bytes_or_str, str):
value = bytes_or_str.encode('utf-8')
else:
value = bytes_or_str
return value # Instance of bytes
- python3中,如果通过内置的open函数获取了文件句柄,该句柄默认会采用UTF-8编码模式来操作文件,在使用时要注意。如果要采用二进制模式来操作文件,则需要用‘wb’来打开文件:
with open('random.bin', 'wb') as f:
f.write(os.urandom(10))
在python2中:
with open('random.bin', 'w') as f:
f.write(os.urandom(10))
要点:
- 在python3中,bytes是一种包含8位值的序列,str是一种包含unicode字符的序列。开发者不能以>或+等操作符来混同操作bytes和str实例。
- 在对输入的数据进行操作之前,使用辅助函数来保证字符序列的类型与开发者的期望相符(有的时候,开发者想操作以utf-8格式来编码8位值,有时候,则想操作Unicode字符)。
- 从文件中读取二进制数据,或向其中写入二进制数据时,总应该以’rb’或’wb’等二进制模式来开启文件。
总结:看完这章后,还是感觉没有完全看明白,一个是unicode字符方面,另一个是文章没有解决中文中经常会用到非utf-8编码方式的问题,这也是困为作者本身是外国人。