Python调用谷歌翻译API出现UTF-8编码不匹配问题求助
解决Python调用谷歌翻译API时UTF-8特殊字符乱码问题
我来帮你搞定这个乱码问题!你遇到的情况其实是两个常见的编码坑导致的:
问题根源分析
- URL参数未编码:你直接把句子拼接到URL里,当内容包含特殊字符(比如省略号
…、德语变音符号)时,Python不会自动对这些字符进行URL编码,而浏览器会帮你做这件事,这就是为什么浏览器正常但脚本出错的核心原因。 - 响应处理错误:
requests库的r.text已经是自动解码后的Unicode字符串了,你再做encode().decode('utf8','ignore')完全是画蛇添足,反而可能破坏原本正确的编码。
修正后的代码
直接用requests的params参数传递查询内容,它会自动帮你处理URL编码;同时用r.json()直接解析响应,比手动json.loads(r.text)更稳妥:
# -*- encoding: utf-8 -*- import requests satz = "Beneath the moonlight glints a tiny fragment of silver, a fraction of a line…" url = 'https://translate.googleapis.com/translate_a/single' params = { 'client': 'gtx', 'sl': 'en', 'tl': 'de', 'dt': 't', 'q': satz } r = requests.get(url, params=params) # 直接解析JSON响应 translation_results = r.json() # 遍历翻译结果(更Pythonic的写法) for item in translation_results[0]: print(item[0])
运行结果
执行后你会得到正确的德语翻译,特殊字符正常显示:
Unter dem Mondschein glänzt ein winziges Silberfragment, ein Bruchteil einer Linie…
额外提示
- 永远不要手动拼接URL查询参数,用
params参数是最安全的方式,能避免各种编码问题。 requests会自动检测响应的编码,所以r.json()可以直接正确解析包含特殊字符的内容,不需要额外的编码转换操作。
内容的提问来源于stack exchange,提问作者keschra




