运行此代码时抛出异常。如果用“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>
答案 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,它将播放所需的字词。