Android: MediaPlayer не может загрузить URL с символами хинди - PullRequest
1 голос
/ 22 марта 2011

Исключение выдается, когда я запускаю этот код. Если вы замените символы хинди в 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>

Ответы [ 3 ]

2 голосов
/ 22 марта 2011

Я не думаю, что символы Юникода являются допустимыми в URL, если вы их не кодируете.Вот спецификация: http://tools.ietf.org/html/rfc1738

1 голос
/ 22 ноября 2011

Я нашел решение от другого человека. Вы должны сначала закодировать текст. Затем вы должны добавить метод кодирования в параметре ie. Для вашего текста, если вы установите URL для медиаплеера как http://translate.google.com/translate_tts?ie=UTF-8&q=%e0%a4%86%e0%a4%b2%e0%a5%82, он воспроизведет нужное слово.

1 голос
/ 22 марта 2011

+ 1 tdammers правильно, вы не можете иметь не-ASCII символы в URI .

Вы можете иметь их в 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 с хинди в адресной строке.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...