python打开⽂件时提⽰“Filewasloadedinthewrongencoding。
。。
问题:练习CSV⽂件存储时,查看⽂件内容时出现中⽂乱码,如下图所⽰:
⾸先解决这⾥中⽂显⽰乱码的问题:
解决⽅式⼀:选择这⾥的“Reload in GBK”,然后就会发现⽂字正常显⽰了,并且pycharm当前项⽬的设置中,⼦设置项File Encoding中,这个⽂件的编码⽅式被特殊标记为了GBK。
关于File Encoding 这个⼦设置页的说明:
Global Encoding :全局编码⽅式
Project Encoding:当前项⽬编码⽅式
⽩⾊区域下⾯的那⼀段英⽂的意思:为了改变pycharm中⼀个⽂件、⽬录或者整个项⽬的编码⽅式,添加其路径并在编码列表中选择其编码⽅式即可。内置的⽂件编码(如:.JSP,.HTML,.XML)会覆盖这⾥的说明。如果没有说明,⽂件和⽬录会继承其⽗⽬录或者整个项⽬的编码⽅式。
这也就是为什么我们点击“reload in GBK ”后,它会被加⼊到⽩⾊区域中成为其中⼀条的原因,因为这⾥有特殊说明,所以这个⽂件以后打开的时候,不再会继承整个项⽬的编码⽅式“UTF-8”了。⽽我们将这⾥的特殊说明删除时,下次读取这个⽂件时,仍旧会继承Project Encoding 的UTF-8,依然提⽰编码有误。
原因追查:
查看设置中发现pycharm中命名设置了项⽬和全局的编码都是UTF-8啊,想着编码都是UTF-8,⽽读取时却提⽰误⽤了UTF-8编码?难道⽂件写⼊不是⽤的UTF-8?所以⽤它解码才提⽰错误?那么提⽰⽤GBK,为什么要⽤GBK呢?是巧合呢还是因为写⼊时就是GBK,所以才有这样的提⽰?难道创建⽂件写⼊时,没有使⽤pycharm的编码设置?python怎么读取py文件
既然推断⽂件写⼊可能根本没有使⽤pycharm的编码设置,就开始对File Encoding页进⾏如下各种设置,以确定写⼊的时候确实没有受到pycharm中编码的设置
1、全局是UTF-8,项⽬是GBK,打开⽂件时显⽰正常
2、全局是UTF-8,项⽬也是UTF-8,打开⽂件时提⽰也是使⽤了UTF-8,显⽰编码错误
3、全局是GBK,项⽬也是GBK,显⽰正常
4、全局GBK,项⽬是UTF-8,打开⽂件使⽤了UTF-8,显⽰编码错误
5、全局ShiftJIS,项⽬GBK,显⽰正常,
⽆论Global Encoding是什么,Project Encoding是GBK就能读取正常,其他则显⽰错误,就算Global Encoding和Project Encoding都设置相同,读取时仍旧显⽰编码错误,所以这⾥写⼊⽂件根本没有使⽤pycharm中File Encoding的设置!
继续追查问题
既然写⼊⽂件时不受IDE的影响,那么是不是问题出在open()函数呢?之后查看python官⽅⽂档关于open()函数的说明发现果然是这
样,open()打开⽂件时,默认使⽤的编码⽅式就是依赖于系统的,官⽅⽂档如下:
意思就是:使⽤open()以⽂本模式打开⽂件时,如果编码未指定,则使⽤的编码是与平台相关的:调⽤preferredencoding(False)可获取当前的本地编码。按照官⽅⽂档的提⽰,获取windows上系统默认编码如下:
注:CP936 就是 GBK,IBM 在发明 Code Page 的时候将 GBK 放在第 936 页,所以叫 CP936。
所以根因是:因为open()函数在没有指定编码⽅式时,写⼊⽂本使⽤的是系统默认编码,也就是GBK,所以这就是为什么我之前⽆论怎么修改pycharm中Global Encoding与读取时使⽤的Project Encoding⼀致,只要Project Encoding不是GBK就会显⽰编码错误的原因了!
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论