python 3.0 open()默认编码

时间:2016-03-30 08:49:03

标签: python-3.x utf-8 character-encoding

我正在尝试计算JSON文件中的行。 Click HERE to access my JSON file .

我尝试使用以下代码计算行数。

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>

然后我在open函数中包含了编码参数,如下所示。

input = open("json/world_bank.json",encoding="utf8")

然后它开始工作并输出为500。

据我所知,python open应考虑&#34; utf8&#34;作为默认编码。

我在这里出错了。

1 个答案:

答案 0 :(得分:19)

Python 3的默认UTF-8编码仅扩展到byte-&gt; str转换。 open()使用您的环境来选择合适的编码:

来自{3} docsopen()

  

encoding是用于解码或编码文件的编码的名称。这应该只在文本模式下使用。默认编码取决于平台(无论locale.getpreferredencoding()返回),但可以使用Python支持的任何文本编码。请参阅编解码器模块以获取支持的编码列表。

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