我正在尝试计算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;作为默认编码。
我在这里出错了。
答案 0 :(得分:19)
Python 3的默认UTF-8编码仅扩展到byte-&gt; str转换。 open()
使用您的环境来选择合适的编码:
来自{3} docs的open()
:
encoding
是用于解码或编码文件的编码的名称。这应该只在文本模式下使用。默认编码取决于平台(无论locale.getpreferredencoding()返回),但可以使用Python支持的任何文本编码。请参阅编解码器模块以获取支持的编码列表。
在您的情况下,当您使用西欧/北美的Windows时,您将获得8位Windows-1252字符集。将encoding
设置为utf-8
会覆盖此内容。