[Ayuda - Android] TextView no reconoce caracteres especiales <?>

Iniciado por PabloPbl, 6 Abril 2015, 04:47 AM

0 Miembros y 1 Visitante están viendo este tema.

PabloPbl

Pues tengo un TextView que lo agrego desde el xml que por defecto lo dejo vacio para luego desde el código java poner algún texto como consecuencia de una acción de un botón.

Resulta que al momento de setear el texto del TextView desde el código, los caracteres especiales como las tilde por ejemplo, se muestran así <?> y no como debería ser.

He intentando metiendo una codificación UTF-8 dentro del xml donde va el TextView, pero nada, al momento de mostrarse no me reconoce esos caracteres.

¿Alguien sabe que tengo que especificar y cómo?

Usuario Invitado

Prueba obteniendo los bytes del String en UTF8 y luego mantienes el UTF8 obteniendo un nuevo String a partir de HTML:

Código (java) [Seleccionar]

try {
    String text = new String(c.getString
("TU_TEXTO").getBytes("ISO-8859-1"),
"UTF-8");
    String encodedText = Html.fromHtml(text).toString();
    textView.setText(encodedText);
}   catch(UnsuportedEncodeException e) {
    // mostrar el error al usuario o en un log
    }
}



Saludos.
"La vida es muy peligrosa. No por las personas que hacen el mal, si no por las que se sientan a ver lo que pasa." Albert Einstein

PabloPbl

#2
Hola Gus, muchas gracias de antemano.

Pero en la segunda linea estas haciendo referencia a una variable "c" si no me equivoco que no existe, y me da error.

Usuario Invitado

En efecto, c es un Resources (obtiene los strings del XML). Pero prueba con:

Código (java) [Seleccionar]
String text = new String("TU_TEXTO".getBytes(), "UTF-8");

No le hemos pasado un Charset porque según veo en la API de Android, por defecto es UTF-8. Prueba a ver qué tal.
"La vida es muy peligrosa. No por las personas que hacen el mal, si no por las que se sientan a ver lo que pasa." Albert Einstein

PabloPbl

He probado el código pero sigue sin funcionarme

Lo he puesto de la siguiente manera:

Código (java) [Seleccionar]

try{
                    String texto1 = "Ejecución";
                    String text = new String(texto1.getBytes(), "UTF-8");
                    String encodedText = Html.fromHtml(text).toString();
                    tv1.setText(encodedText);

                    String texto2 = "Explosión";
                    String text2 = new String(texto2.getBytes(), "UTF-8");
                    String encodedText2 = Html.fromHtml(text2).toString();
                    tv2.setText(encodedText2);


                }
                catch(Exception e) {
                    Toast.makeText(this, "Error encodec", Toast.LENGTH_LONG).show();
                }


He descubierto que si agrego todo el texto que quiero que se muestre en el TextView, me lo hace y me lo muestra correctamente, pero si intento cambiar el valor del TextView desde el código Java me lo muestra mal. ¿No sera que algo debo especificar algo en mi código?

Usuario Invitado

"La vida es muy peligrosa. No por las personas que hacen el mal, si no por las que se sientan a ver lo que pasa." Albert Einstein

PabloPbl

He hecho la impresión de 3 formas y me muestra ese signo <?> en vez de las tildes, osea no mantiene las tildes:

Código (java) [Seleccionar]

Toast.makeText(this, encodedText, Toast.LENGTH_LONG).show();
System.out.println(encodedText);
Log.e("IMPRESIÓN", encodedText);

PabloPbl

#7
Bueno después de cansarme y cansarme probando en busca de soluciones, di en el blanco.

Pues resulta que para me haga la codificación, tenia que si o si obtener los String del xml donde se guardan los Strings(string.xml) y de ahí hacer la codificación.

Código (xml) [Seleccionar]

String text = newString(getString(R.string.activity_MostrarImagen_tituloEjecucion).getBytes(), "UTF-8");
String encodedText = Html.fromHtml(text).toString();
tv1.setText(encodedText);


Pues lo que ya hacia era poner un String directamente en el código y no obteniéndolo del xml.

Por lo menos eso resolvió mi problema.

Salu2 y muchas gracias a todos.

Usuario Invitado

Jaja, ya había leído de strings.xml pero pensé que era un poco redundante tener los Strings en un XML cuando el TextView puede cambiar de contenido en tiempo de ejecución y por ejemplo por intervención del usuario. Creo que debe haber una manera más práctica. Investigaré a ver que encuentro.


Un saludo.
"La vida es muy peligrosa. No por las personas que hacen el mal, si no por las que se sientan a ver lo que pasa." Albert Einstein

PabloPbl

#9
xD, El string.xml mas que nada sirve para poder internacionalizar la aplicación, osea poder tener la app en distintos idiomas.

Tu tienes varios xml con los mismos punteros, solo que con diferentes valores, y a valores me refiero a el texto que usara la App para mostrar texto, pues esos valores los puedes poner en diferentes idiomas. Cada xml sera para un idioma en particular. Entonces cuando tu usas la App en una teléfono con un idioma en concreto, pues Android detectara que archivo xml se usara para la App, cabe destacar que para eso tienes que poner unos nombres a los xml para que Android sepa cual usar en cada caso.

Salu2  ;D