python3没有python2的setdefaultencoding咋办

今天才遇到这个问题,直接:with open(‘file.txt’, \u0026#39;r\u0026#39; , encoding =‘utf-8’) as f:
■网友
谢邀不是特别了解Python,只有一点点了解,强答一下^_^理论上可以用这个库:chardetimport chardetf = open(\u0026#39;文件\u0026#39;,\u0026#39;r\u0026#39;)out=chardet.detect(f.read())print out(无视缩进吧X_X)然后根据out的值判断,out是标准的json段。out的可能输出:{\u0026#39;confidence\u0026#39;: 0.96630842899499614, \u0026#39;encoding\u0026#39;: \u0026#39;GB2312\u0026#39;}注意只能判断是否为某种编码的概率。输出解析:数值是概率,字符串是可能的编码输入参数为str类型。有的如UTF-8由于全部只占1字节可能会识别成ANSII编码。识别以后就可以根据编码做事情了。
■网友
在天朝写代码,无非是2种编码方式,不是 utf-8 就是 gbk,无它。所以有一种简单粗暴的方法:```pytry: with open(\u0026#39;abc.txt\u0026#39;, \u0026#39;r\u0026#39;, encoding=\u0026#39;utf8\u0026#39;) as f: blablablaexcept UnicodeDecodeError as e: with open(\u0026#39;abc.txt\u0026#39;, \u0026#39;r\u0026#39;, encoding=\u0026#39;gbk\u0026#39;) as f: blablabla```
■网友
codecs.open(fname, encoding=\u0026#39;utf-8\u0026#39;)
这个东西?

■网友
python2的setdefaultencoding是改变str的默认编码方式,跟你想要的没有关系。
\u0026#39;aaa\u0026#39;.encode(\u0026#39;utf8\u0026#39;) #将\u0026#39;aaa\u0026#39;从默认的ascii转utf8\u0026#39;\\xce\\xd2\u0026#39;.encode(\u0026#39;utf8\u0026#39;)# GBK编码的‘我’,不能使用ascii decode,UnicodeDecodeError。sys.setdefaultencoding(\u0026#39;gbk\u0026#39;)\u0026#39;\\xce\\xd2\u0026#39;.encode(\u0026#39;utf8\u0026#39;) #okpython3的以文本读取文件时会自动decode文件内容,所以需要指定encoding,默认似乎是当前系统编码(这个不确定)。
open(\u0026#39;xxx\u0026#39;, encoding=encoding_of_the_file)你自己必须知道文件的编码才能完成你想做的事。
【python3没有python2的setdefaultencoding咋办】 Python2文本模式读文件只会处理换行符问题,所有会把任意编码的内容直接读取的字符串里,而你不知道它的编码,那你后面的操作也会遇到decode error。
除非你不需要字符串的内容,那你使用二进制读取文件,对应的,你应该使用bytes而不是str。
判断文件的编码可以使用chardet模块。


    推荐阅读