我正在尝试计算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>
然后,我在打开函数中包含编码参数,如下所示。
input = open("json/world_bank.json",encoding="utf8")
然后它开始工作,并给出输出为500。
据我所知,python open应该考虑“utf8”作为默认编码。
我错在哪里了。
2条答案
按热度按时间qlzsbp2j1#
Python 3默认的UTF-8编码只扩展到byte-〉str转换。
open()
使用你的环境来选择一个合适的编码:来自Python 3文档的
open()
:encoding
是用于解码或编码文件的编码名称。这只应该在文本模式下使用。默认编码依赖于平台(无论locale.getpreferredencoding()返回什么),但是Python支持的任何文本编码都可以使用。参见codecs模块以获得支持的编码列表。在您的情况下,由于您使用的是西欧/北美的Windows,您将获得8位Windows-1252字符集。将
encoding
设置为utf-8
将覆盖此设置。lf5gs5x22#
今天在venv(@python 3.10.5)中升级我的
pygments-csv-lexer
包时遇到了同样的问题。I finally found a working solution here
在机器级别上设置环境变量
PYTHONUTF8=1
就可以了,这会将默认编码(如果open()
上没有指定)设置为UTF8
。