Google подал вам Моджибаке ;ответ JSON содержит данные, которые были изначально закодированы с использованием UTF-8, но затем были декодированы с использованием другого кодека, что привело к неверным данным.
Я подозреваю, что Google делает это, поскольку декодирует параметры URL;В прошлом параметры URL могли быть закодированы в любом количестве кодеков, то, что UTF-8 теперь является стандартом, является относительно недавней разработкой.Это вина Google, а не ваша или requests
.
. Я обнаружил, что установка заголовка User-Agent
заставляет Google вести себя лучше;даже (неполного) пользовательского агента Mozilla/5.0
здесь достаточно, чтобы Google использовал UTF-8 при декодировании параметров URL-адреса.
Вы также должны убедиться, что строка URL-адреса правильно закодирована в процентах , если вы передадите параметры в словаре в params
, тогда requests
позаботится о том, чтобы правильно добавить их в URL:
satz = "Beneath the moonlight glints a tiny fragment of silver, a fraction of a line…"
url = 'https://translate.googleapis.com/translate_a/single?client=gtx&dt=t'
params = {
'q': satz,
'sl': 'en',
'tl': 'de',
}
headers = {'user-agent': 'Mozilla/5.0'}
r = requests.get(url, params=params, headers=headers)
results = r.json()[0]
for inputline, outputline, *__ in results:
print(outputline)
Обратите внимание, что я вытащил параметры исходного и целевого языкатакже в словарь params
и вытащил значения строк ввода и вывода из списков результатов.