在使用Python时如果要使用utf-8可以在文件头部加入:
# -*- coding:utf-8 -*-
但是加完之后遇到不是ascii的字符串操作等就报错
UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-3: ordinal not in range(128)
UnicodeDecodeError: 'ascii' codec can't decode byte 0xe5 in position 0: ordinal not in range(128)
网上查了查没有什么满意的答案,只能自己调试,最后总算明白原因了:
写了# -*- coding: utf-8 -*-后所有的手动定义的str都会变成unicode类型,必须使用.encode("utf8")转为字符串!
意思就是你写的'a'已经不是str类型而是unicode类型,包括一些内部函数返回的str都变成了unicode,不信的可以自己打印下print(type('a'));所以必须转换字符串再操作,手动转换就不会有编码问题print(type('a'.encode("utf8"))),打印出来的就是str就可以当成普通字符串使用了!