gpt4 book ai didi

python - 脚本中的 UTF 8 不匹配

转载 作者:太空宇宙 更新时间:2023-11-04 04:41:19 25 4
gpt4 key购买 nike

我对 Python 脚本有疑问。我只是尝试用谷歌翻译 API 翻译一些句子。有些句子在使用特殊的 UTF-8 编码(如 ä、ö 或 ü)时会出现问题。无法想象为什么有些句子有效,有些则无效。

如果我直接在浏览器中尝试 API 调用,它可以工作,但在我的 Python 脚本中我发现不匹配。

这是我的脚本的一个小版本,它直接显示了错误:

# -*- encoding: utf-8' -*-
import requests
import json

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&sl=en&tl=de&dt=t&q='+satz
r = requests.get(url);
r.text.encode().decode('utf8','ignore')
n = json.loads(r.text);
i = 0
while i < len(n[0]):
newLine = n[0][i][0]
print(newLine)
i=i+1

这是我的结果:

Unter dem Mondschein glänzt ein winziges Silberfragment, ein Bruchteil einer Li
nie â ? |

最佳答案

Google 已为您提供 Mojibake ; JSON 响应包含原始使用 UTF-8 编码但随后使用不同编解码器解码导致数据不正确的数据。

我怀疑 Google 在解码 URL 参数时会这样做;过去 URL 参数可以用任意数量的编解码器进行编码,现在 UTF-8 标准是一个相对较新的发展。这是 Google 的错,不是您或请求的错。

我发现设置 User-Agent header 可以使 Google 表现更好;即使是 Mozilla/5.0 的(不完整的)用户代理也足以让 Google 在解码您的 URL 参数时使用 UTF-8。

您还应该确保您的 URL 字符串是 properly percent encoded ,如果您将字典中的参数传递给 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 字典中,并从结果列表中提取了输入和输出行值。

关于python - 脚本中的 UTF 8 不匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50536647/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com