利用Python读取文本数据时,有时会遇到UnicodeDecodeError: 'ascii' codec can't decode byte 0xee in position 20: ordinal not in range(128) 报错的提示。参照网上多数教程,如果在jupyter中直接加上下面
import sys
reload(sys)
sys.setdefaultencoding('utf-8')
有时会导致,整个后面jupyter的print 输出都被隐藏。上面的做法实质上reload导致了输出流被截断,所以后面的print都显示不出来。
在《python数据分析》的第二章案例源代码中加上 encoding = 'latin1' 就容易遇到上面错误。
正确的解法:
在代码开头处注明:
import sys
stdo = sys.stdout
reload(sys)
sys.setdefaultencoding('utf-8')
sys.stdout= stdo
即可。其实就是重新将输出流又重定向了而已。