Python 3.x python 3.0 open()默认编码

Python 3.x python 3.0 open()默认编码,python-3.x,utf-8,character-encoding,Python 3.x,Utf 8,Character Encoding,我试图计算JSON文件中的行数。 我试着用下面的代码来计算行数 input = open("json/world_bank.json") i=0 for l in input: i+=1 print(i) 但是上面的代码抛出一个UniCodeDecode错误,如下所示 --------------------------------------------------------------------------- UnicodeDecodeError

我试图计算JSON文件中的行数。

我试着用下面的代码来计算行数

input = open("json/world_bank.json")
i=0
for l in input:
    i+=1
print(i)
但是上面的代码抛出一个UniCodeDecode错误,如下所示

---------------------------------------------------------------------------
UnicodeDecodeError                        Traceback (most recent call last)
<ipython-input-17-edc88ade7225> in <module>()
      2 
      3 i=0
----> 4 for l in input:
      5     i+=1
      6 

C:\Users\Subbi Reddy\AppData\Local\Continuum\Anaconda3\lib\encodings\cp1252.py in decode(self, input, final)
     21 class IncrementalDecoder(codecs.IncrementalDecoder):
     22     def decode(self, input, final=False):
---> 23         return codecs.charmap_decode(input,self.errors,decoding_table)[0]
     24 
     25 class StreamWriter(Codec,codecs.StreamWriter):

UnicodeDecodeError: 'charmap' codec can't decode byte 0x81 in position 3979: character maps to <undefined>
input = open("json/world_bank.json",encoding="utf8")
然后它开始工作,输出为500

据我所知,Python Open应该考虑“UTF8”作为默认编码。


这里我错了。

Python 3的默认UTF-8编码只扩展到字节->str转换<代码>打开()而是使用您的环境选择适当的编码:

从Python 3的
open()

encoding
是用于解码或编码文件的编码的名称。这只能在文本模式下使用。默认编码依赖于平台(无论locale.getpreferredencoding()返回什么),但是可以使用Python支持的任何文本编码。有关支持的编码列表,请参见编解码器模块


在您的情况下,当您使用西欧/北美的Windows时,您将获得8位Windows-1252字符集。将
encoding
设置为
utf-8
会覆盖此设置。

sys.getfilesystemencoding()会在您的系统上返回什么?这里是“mbcs”@marcelmAh-hmm,这不会告诉我太多;你能检查一下
open(“json/world_bank.json”)。编码也可以吗?幸运的是,有很多方法可以结束这种疯狂。。。有一天,我的机器上安装了.3.9,它仍然使用Windows1252编码。由@Jeyekomon链接的PEP 597现在称为Python 3.10。@StefanBerger伙计们,请阅读PEP。它只是在未设置
编码
参数时发出警告。他们提到他们知道编码问题,但变化太大了。当有一天起草实际默认的utf-8开放编码PEP时,该PEP应该会简化流程。