4

我正在尝试从 google TTS API 下载 mp3 文件,这是代码

try {   

        String path ="http://translate.google.com/translate_tts?tl=en&q=hello";
        //this is the name of the local file you will create
        String targetFileName = "test.mp3";
            boolean eof = false;
        URL u = new URL(path);
        HttpURLConnection c = (HttpURLConnection) u.openConnection();
        c.addRequestProperty("User-Agent", "Mozilla/5.0");
        c.setRequestMethod("GET");
        c.setDoOutput(true);
        c.connect();
        FileOutputStream f = new FileOutputStream(new File(Environment.getExternalStorageDirectory()
                + "/download/"+targetFileName));
            InputStream in = c.getInputStream();
            byte[] buffer = new byte[1024];
            int len1 = 0;
            while ( (len1 = in.read(buffer)) > 0 ) {
            f.write(buffer,0, len1);
                     }
        f.close();
        } catch (MalformedURLException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
        } catch (ProtocolException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
        } catch (FileNotFoundException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
        } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();


    }

这很好用,但是当我尝试请求使用特殊字符的中文或希腊语等语言时

String path ="http://translate.google.com/translate_tts?tl=zh-TW&q=你好";

我得到的 mp3 文件没有声音,但从文件的大小我可以看出它里面有数据。当我尝试用阿拉伯语做同样的事情时

String path ="http://translate.google.com/translate_tts?tl=ar&q=%D8%A7%D9%84%D9%84%D9%87";

我得到一个 0 字节的空 mp3 文件。

我尝试过使用不同的用户代理,但似乎没有任何效果。

请帮忙。

谢谢你

4

3 回答 3

3

将路径用作 URI 而不是字符串,然后将其更改为 ascii 字符串。

URI uri = new URI("http://translate.google.com/translate_tts?tl=zh-TW&q=你好");

URL u = new URL(uri.toASCIIString());
于 2012-04-26T14:23:19.167 回答
1

我有你同样的问题。但是我昨天已经解决了。我想让 API 说中文并保存到 mp3 文件。

现在的 url 是: path ="http://translate.google.com/translate_tts?tl=zh-TW&q=你好" 你这样做: path ="http://translate.google.com/translate_tts?ie =UTF-8&tl=zh-TW&q=".urlencode("你好");

添加一个参数 ie=utf-8 并对中文单词进行编码。你会得到你想要的。

于 2013-05-07T02:30:17.460 回答
0

如果应用程序崩溃试试这个

txtToTranslate = txtToTranslate.replace(" ", "%20");

它替换单词之间的空格。

于 2013-09-27T00:19:22.667 回答