#python #bash #encoding #utf-8
Вопрос:
Я написал один скрипт запроса, который взаимодействует с API, но, когда я запускаю его через терминал git-bash, возникает проблема: исключение UnicodeEncodeError (см. Полную обратную трассировку ниже). Если быть более точным, я использую vim в качестве текстового редактора, поэтому запускаю файлы в другом окне git-bash. Следующий код отлично работает в интегрированном терминале VSCode, но не в git-bash.
Вот мой код:
import requests
import os
api_key = os.getenv('yandex_praktikum_api_key')
HEADERS = {
'Authorization': f'OAuth {api_key}'
}
response = requests.get(
'https://praktikum.yandex.ru/api/user_api/homework_statuses/',
params={'from_date': 0},
headers=HEADERS
)
print(response.json()) # Here exception occurs.
Вывод терминала Git-bash:
User@DESKTOP-CVQ282P MINGW64 ~/Desktop
$ python backpool.py
Traceback (most recent call last):
File "backpool.py", line 20, in <module>
print(response.json())
File "D:Python3libencodingscp1252.py", line 19, in encode
return codecs.charmap_encode(input,self.errors,encoding_table)[0]
UnicodeEncodeError: 'charmap' codec can't encode characters in position 68-74: character maps to <undefined>
Вывод терминала VSCode (успешно работает):
User@DESKTOP-CVQ282P MINGW64 ~
$ D:/Python3/python.exe c:/Users/User/Desktop/backpool.py
{'source': '__response__', 'code': 'not_authenticated', 'message': 'Учетные данные не были предоставлены.'}
Настройки кодирования терминала:
User@DESKTOP-CVQ282P MINGW64 ~/Desktop
$ locale
LANG=C.UTF-8
LC_CTYPE="C.UTF-8"
LC_NUMERIC="C.UTF-8"
LC_TIME="C.UTF-8"
LC_COLLATE="C.UTF-8"
LC_MONETARY="C.UTF-8"
LC_MESSAGES="C.UTF-8"
LC_ALL=
Настройки кодировки Vim:
" Encoding and backup settings
set nobackup
set noswapfile
set encoding=utf-8
set termencoding=utf-8
set fileencodings=utf-8
Комментарии:
1. Вероятно, проблема, связанная с кодовой страницей терминала. Не могли бы вы дать нам значение переменной среды термина для вашего терминала git-bash и вашего терминала VS-кода ? Поскольку библиотека cp1252 используется python с git-bash, похоже, что ваша консоль git-bash-это консоль Windows, не так ли ?