Android:MediaPlayer无法加载带有印地语字符的网址

时间:2011-03-22 09:02:35

标签: android url unicode hindi

运行此代码时抛出异常。如果用“Hello”替换URL中的印地语字符,则播放文件就好了。

当我在浏览器中加载此URL(使用印地语字符)时,它可以正常播放。

发生了什么事?

这是我的代码:

MediaPlayer mediaPlayer = new MediaPlayer();

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

mediaPlayer.prepare(); 

这是字符串资源def:

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

3 个答案:

答案 0 :(得分:2)

我不认为unicode字符在URL中是合法的,除非您对它们进行编码。这是规格: http://tools.ietf.org/html/rfc1738

答案 1 :(得分: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形式显示,并在地址栏中显示印地语。)

答案 2 :(得分:1)

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