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;) #ok
python3的以文本读取文件时会自动decode文件内容,所以需要指定encoding,默认似乎是当前系统编码(这个不确定)。open(\u0026#39;xxx\u0026#39;, encoding=encoding_of_the_file)
你自己必须知道文件的编码才能完成你想做的事。
【python3没有python2的setdefaultencoding咋办】 Python2文本模式读文件只会处理换行符问题,所有会把任意编码的内容直接读取的字符串里,而你不知道它的编码,那你后面的操作也会遇到decode error。
除非你不需要字符串的内容,那你使用二进制读取文件,对应的,你应该使用bytes而不是str。
判断文件的编码可以使用chardet模块。
推荐阅读
- 家中千万不要摆这些绿植,对身体不仅没有帮助,还会起反作用
- 耻骨|韧带痛、耻骨也痛,从来没有这么痛过,痛了两个多星期了!”厦门孕妈崩溃:“孕晚期各种不舒服
- 5.1声道片源对于没有5.1硬件系统的用户来说有意义吗
- 知乎有没有必要增加一个特别关注功能
- 孕妇到了预产期,小孩还没有入盆,请问是该等下去还是直接剖腹产
- 电视墙没有预留网线口,智能电视怎样上网
- 新浪微博创新基金投资了哪些团队
- 为啥到现在你还没有女朋友 ?
- 微博目前已经支持文本,图片,位置分享,为啥没有语音和视频呢微博的pm肯定想过这两种微博形态,但迟迟不做的原因到底是啥。是语音和视频不符合产
- 别透支丁真的流量