write方法的参数类型是str,str是二进制流(不包含编码信息),当你给出一个unicode对象时,会执行str函数转换成str类型再送给write方法。unicode转str包含一次编码,如不指定则默认使用ascii编码,而ascii编码集里汉字字符是没有对应的,所以报错。
然后代码首行的编码标记是用来告诉解释器这个程序的源代码是用什么编码存的。
正确姿势是在代码里指定编码。比如在open里指定,或者在write的时候手动把unicode对象通过encode方法指定编码产生str。
就是说写成fp.write(s.encode('utf8'))。注意unicode对象用encode是有意义的,str对象在py2里允许你对str对象使用encode,然而这是对指定了default encoding的情况下才有效的,因此不推荐新手对str直接encode。
python 2 +linux
这样做
领取专属 10元无门槛券
私享最新 技术干货