利用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
即可。其实就是重新将输出流又重定向了而已。
当使用Python读取包含非ASCII字符的文本文件时,可能会遇到UnicodeDecodeError。通常,错误提示'ascii'codec can't decode byte 0xee in position 20: ordinal not in range(128)。为解决此问题,可以尝试在代码开头设置文件编码。一种常见但不推荐的方法是使用`sys.setdefaultencoding('utf-8')`,但这可能导致输出流被截断。正确的做法是在打开文件时指定编码,例如`open(filename, 'r', encoding='utf-8')`。如果文件实际编码为latin1,那么应该使用`open(filename, 'r', encoding='latin1')`。确保正确识别并指定文件的编码能避免错误并保持输出正常。
4154

被折叠的 条评论
为什么被折叠?



