【问题标题】:Android: MediaPlayer can't load URL with Hindi charactersAndroid:MediaPlayer 无法加载带有印地语字符的 URL
【发布时间】:2011-03-22 09:02:35
【问题描述】:

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

当我在浏览器中加载此 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>

【问题讨论】:

  • 嗨 mellowg,您是否找到了在 mediaplayer 中使用该 URL 播放声音的解决方案?我也面临同样的问题。

标签: android url unicode hindi


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    +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 形式显示它,并在地址栏中显示印地语。)

    【讨论】:

    • 如果您尝试使用带有 %-encoding 的编码 uri 来 MediaPlayer.setDataSource(),它仍然无法播放该 MP3。但是如果你将它粘贴到 Chrome 或 Firefox 中,它会像你说的那样转换它并播放它。 ???
    • @mellog:如果您找到了在 mediaplayer 中播放 unicode 字符的 url 的任何解决方案,请提供解决方案。
    • 抱歉没找到解决办法——就放弃了
    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-05-24
      • 1970-01-01
      • 1970-01-01
      • 2011-05-14
      • 2021-12-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多