【发布时间】:2015-03-13 09:44:56
【问题描述】:
我目前正在尝试使用 requests 库在 python 中使用日文字符和短语点击 google tts url http://translate.google.com/translate_tts。
这是一个例子:
http://translate.google.com/translate_tts?tl=ja&q=ひとつ
但是,当我尝试使用 python 请求库下载端点返回的 mp3 时,生成的 mp3 为空白。我已验证我可以使用非 Unicode 字符(通过罗马字)在请求中点击此 URL,并得到正确的回复。
这是我用来发出请求的代码的一部分
langs = {'japanese': 'ja',
'english': 'en'}
def get_sound_file_for_text(text, download=False, lang='japanese'):
r = StringIO()
glang = langs[lang]
text = text.replace('*', '')
text = text.replace('/', '')
text = text.replace('x', '')
url = 'http://translate.google.com/translate_tts'
if download:
result = requests.get(url, params={'tl': glang, 'q': text})
r.write(result.content)
r.seek(0)
return r
else:
return url
另外,如果我在这个 sn-p 中打印 text 或 url,假名/日本汉字会在我的控制台中正确呈现。
编辑:
如果我尝试对 unicode 进行编码并引用它,我仍然会得到相同的响应。
# -*- coding: utf-8 -*-
from StringIO import StringIO
import urllib
import requests
__author__ = 'jacob'
langs = {'japanese': 'ja',
'english': 'en'}
def get_sound_file_for_text(text, download=False, lang='japanese'):
r = StringIO()
glang = langs[lang]
text = text.replace('*', '')
text = text.replace('/', '')
text = text.replace('x', '')
text = urllib.quote(text.encode('utf-8'))
url = 'http://translate.google.com/translate_tts?tl=%(glang)s&q=%(text)s' % locals()
print url
if download:
result = requests.get(url)
r.write(result.content)
r.seek(0)
return r
else:
return url
返回这个:
http://translate.google.com/translate_tts?tl=ja&q=%E3%81%B2%E3%81%A8%E3%81%A4
这似乎应该有效,但没有。
编辑 2:
如果我尝试使用 urlllb/urllib2,我会收到 403 错误。
编辑 3:
所以,这个问题/行为似乎仅限于这个端点。如果我尝试以下 URL,则使用不同的端点。
http://www.kanjidamage.com/kanji/13-un-%E4%B8%8D
在请求和我的浏览器中,我得到了相同的响应(它们匹配)。如果我什至尝试将 ascii 字符发送到服务器,例如这个 url。
http://translate.google.com/translate_tts?tl=ja&q=sayonara
我也得到了相同的响应(它们再次匹配)。但是,如果我尝试向此 URL 发送 unicode 字符,我会在浏览器上获得正确的音频文件,但不是来自请求,它发送音频文件,但没有声音。
http://translate.google.com/translate_tts?tl=ja&q=%E3%81%B2%E3%81%A8%E3%81%A4
那么,这种行为似乎仅限于 Google TTL URL?
【问题讨论】:
-
您的控制台可能未正确配置为显示字符,这听起来像是一般的 utf-8 编码问题。即使我很确定您使用的是 Windows 机器,我能否问一下您使用的是什么操作系统。
-
@AustinA 它在我的控制台上显示正常。它是 pycharm 中的一个控制台,我目前正在 linux 环境中运行它。
-
嘿,对不起@jab,我把你的“渲染”误读为“没有渲染”。无论如何,我希望我添加的代码 sn-p 有效。我不确定你是否尝试过预先进行 UTF-8 编码和解码。
-
另外注意,如果你尝试使用 なな。它将返回一个“e”音,如字符え。我尝试过的其他一切都没有返回。
标签: python unicode python-requests