1

运行此代码时引发异常。如果您将 URL 中的印地语字符替换为“Hello”,它可以正常播放文件。

当我在浏览器中加载此 URL(带有印地语字符)时,它播放得很好。

这是怎么回事?

这是我的代码:

MediaPlayer mediaPlayer = new MediaPlayer();

mediaPlayer.setDataSource(getResources().getString(R.string.test)); 

mediaPlayer.prepare(); 

这是字符串资源定义:

<string name="test">http://translate.google.com/translate_tts?q=आलू&lt;/string>
4

3 回答 3

2

我不认为 unicode 字符在 URL 中是合法的,除非你对它们进行编码。这是规范: https ://www.rfc-editor.org/rfc/rfc1738

于 2011-03-22T09:06:06.323 回答
1

+1 tdammers 是对的,在URI中不能有非 ASCII 字符。

可以将它们放在IRI中,这就是:

http://translate.google.com/translate_tts?q=आलू

浏览器通常支持 IRI(有一些限制),但许多其他工具不支持(显然包括 Android 媒体播放器)。对于这些工具,您必须将 IRI 转换为 URI。这是通过以下方式完成的:

  • 获取地址的主机名部分中的任何非 ASCII 字符并使用IDN算法对其进行编码;

  • 在地址的其他部分(如这里的查询)中获取任何非 ASCII 字符并对其 UTF-8 字节表示进行 % 编码。

这给了你:

http://translate.google.com/translate_tts?q=%e0%a4%86%e0%a4%b2%e0%a5%82

这应该可以在任何地方工作。(然后将这样的 URI 粘贴到浏览器中,通常它会以 IRI 形式显示它,并在地址栏中显示印地语。)

于 2011-03-22T20:53:36.720 回答
1

我从其他人那里找到了解决方案。您首先对文本进行了编码。然后你必须在“ie”参数中添加编码方法。对于您的文本,如果您将媒体播放器的网址设置为http://translate.google.com/translate_tts?ie=UTF-8&q=%e0%a4%86%e0%a4%b2%e0%a5%82它将播放想要的词。

于 2011-11-22T19:00:58.877 回答