Git Bash出现UnicodeEncodeError,cmd.exe没有



我正在对url进行一个简单的API调用,将数据保存为python字典d并打印d

import requests
r = requests.get(url)
d = r.json()
print(d)

当我在Windows 10上通过cmd.exe执行脚本时,一切正常:

> python script.py
{'pagination': {'page': 1, 'pages': 2, 'per_page': 50, 'items': 58, 'urls': {'last': ...

但是,当我通过GitBash运行它时,为什么它会抛出错误?你能帮我理解这个错误吗?

$ git --version
git version 2.33.0.windows.2
$ python script.py
Traceback (most recent call last):
File "C:Users...Projectsdiscogs-datascript.py", line 6, in <module>
print(d)
File "C:Users...AppDataLocalProgramsPythonPython39libencodingscp1252.py", line 19, in encode
return codecs.charmap_encode(input,self.errors,encoding_table)[0]
UnicodeEncodeError: 'charmap' codec can't encode character 'u2153' in position 1544: character maps to <undefined>

我假设Python在打印d之前尝试使用cp1252编码来解码它。但是为什么它必须首先解码d,为什么它可以使用cmd.exe而不能使用Git Bash?

我认为两者(Windows和Git-Bash)对标准输出使用不同的编码。您可以通过sys模块进行确认。

>>> import sys
>>> print(sys.stdout.encoding)

根据您的回溯,Git Bash使用cp1252编码,无法对d指向的所有字符进行编码。如果您仍然想在Git Bash终端中显示字符,您可以使用"cp1252"编码对字符串进行编码,并将错误设置为replace,这样任何不可编码的字符都将呈现为?

>>> a = 'u2153' # from your error message.
>>> a.encode('cp1252', errors='replace')
b'?'
>>> a.encode('cp1252', errors='replace').decode()
'?'

最新更新