¿Cómo usar el servicio Text-to-Speech de Google para los caracteres chinos en Android?

Estoy tratando de extraer un archivo de audio de la función de texto a voz de google. Básicamente, lanzar en el enlace y luego concat lo que quieras que se habla al final de la misma. He conseguido el código abajo para trabajar apenas muy bien para el inglés, así que pienso que el problema debe ser cómo los caracteres chinos están consiguiendo codificados en la petición. Esto es lo que tengo:

String text = "text to be spoken"; public static final String AUDIO_CHINESE= "http://www.translate.google.com/translate_tts?tl=zh&q="; public static final String AUDIO_ENGLISH = "http://www.translate.google.com/translate_tts?tl=en&q="; URL url = new URL(AUDIO_ENGLISH + text); urlConnection = (HttpURLConnection) url.openConnection(); urlConnection.setRequestMethod("GET"); urlConnection.setRequestProperty("Accept-Charset", Variables.UTF_8); if (urlConnection.getResponseCode() ==200) { //get byte array in response in = new DataInputStream(urlConnection.getInputStream()); } else { in = new DataInputStream(urlConnection.getErrorStream()); } //use commons io byte[] bytes = IOUtils.toByteArray(in); in.close(); urlConnection.disconnect(); return bytes; 

Cuando intento esto con caracteres chinos, sin embargo, devuelve algo que no puedo conseguir para jugar en el mediaplayer (sospecho que no es un archivo de audio adecuado como la gran mayoría de bytes son '85'). Así que he probado ambos

 String chText = "你好"; URL url = new URL(AUDIO_CHINESE + URLEncoder.encode(chText, "UTF-8)); 

y

 URL url = new URL(AUDIO_CHINESE + Uri.encode(chText, "UTF-8")); 

Y luego agregando

 urlConnection.setRequestProperty("content-type", "application/x-www-form-urlencoded; charset=UTF-8"); 

Al encabezado de la solicitud. Esto sólo lo hizo peor, sin embargo, porque ahora ni siquiera devolver un código de 200, en lugar de indicar "FileNotFound" en logcat.

Así que por un capricho, volví y probé la codificación URL / Uri con el texto en inglés, y ahora el inglés no devolverá un resultado válido tampoco. No estoy seguro de lo que está pasando aquí: la url cruda en el depurador funciona bien si copio y pego en Chrome, pero por alguna razón el urlConnection simplemente no funciona. Siento que me falta algo obvio.

EDITAR

Jugando con él un poco más ha revelado ninguna respuesta, sólo más confusión (y exasperación). Por alguna razón, cuando se envía por httpurlconnection, la máquina de Google tts lee el texto utf-8 por ciento-codificado como utf-16, por lo menos hasta donde puedo decir. Por ejemplo, el carácter "維" (wei2) es %E7%B6%AD , pero si lo pasa a través de la conexión, obtendrá un archivo que pronuncia "see" ("ç", para ser exactos).

Ç, como resulta, es 0x00E7 en UTF-16 (su utf-8 por ciento de codificación de la versión es %C3%A7 ). No tengo ni idea de por qué hace eso en Java, porque poner el% apropiado al final del enlace en cualquier navegador funcionará correctamente. Hasta ahora, he intentado varias combinaciones de intentar conseguir los tts para leer la totalidad de %E7%B6%AD sin mucho éxito.

EDIT2

Solución a mi problema encontrado! Vea a continuación la respuesta. El problema no estaba en la codificación, sino en el análisis al final de Google. Ha editado el título en consecuencia. ¡Aclamaciones!

Así que, como resulta, el problema al final no era la codificación en absoluto; Era el proceso en el extremo de Google. Para que el servicio reconozca correctamente UTF-8, debe utilizar este enlace http://www.translate.google.com/translate_tts?ie=utf-8&tl=zh-cn&q= lugar del anterior. Observe el ie=utf-8 añadido al parámetro. Así que puedes simplemente URLEncoder.encode("你好嗎", "UTF-8") , añadirlo al enlace y enviarlo como de costumbre. ¡Uf!

  • Edición específica de Url de Media Player de Android
  • ¿Cómo puedo pasar varios parámetros en la URL?
  • Android: no se muestra ImageView con UIL y TouchImageView
  • HttpURLConnection de Android y URL con caracteres especiales
  • Cómo leer la imagen de url particular en android
  • Org.json.JSONObject no se puede convertir en JSONArray en android
  • Uso de una URL web para SUGGEST_COLUMN_ICON_1 para sugerencias de búsqueda
  • Android enlace activo de url en TextView
  • ¿Está el intento de compartir facebook en Android todavía roto?
  • Descarga de archivos en Android
  • ¿No pudo abrir la aplicación linkedIn con el perfil de la empresa (url) por otra aplicación android?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.