PDA

Ver la Versión Completa : [ CONSULTA ] Leer caracteres especiales de un Assets .txt


davidddp
28/06/13, 11:26:41
Pues eso, un fichero .txt en la carpeta Assets. Lo utilizo para mostrar el texto cuando lo necesito.
Todo funciona bien a excepción de que no me muestras los acentos ni ningún caracter especial.
Creo que el fallo no es del código sino de la codificación del txt pero no se solucionarlo, por si acaso pongo mi código para leer el .txt:

AssetManager assetManager = getAssets();

InputStream input;
try {
input = assetManager.open(file);
int size = input.available();
byte[] buffer = new byte[size];
input.read(buffer);
input.close();
String text = new String(buffer);
txtIta.setText(text);

} catch (IOException e) {
e.printStackTrace();
}

mocelet
28/06/13, 11:34:19
De primeras, envuelve el InputStream en un InputStreamReader que se encarga de la decodificación de texto.

InputStreamReader reader = new InputStreamReader(input, "UTF-8");

Y usa el reader en vez del input en todos los sitios.

Por supuesto, asegúrate de que el fichero txt está codificado en UTF-8

EDIT: El buffer en vez de byte[] es de tipo char[], usar byte es problemático con las codificaciones, char es seguro porque son caracteres independientes de la codificación

davidddp
28/06/13, 11:53:31
PERFECTO Mocelet! Gracias. Indico el código por si alguien tiene el mismo problema:

AssetManager assetManager = getAssets();
InputStream input;
try {
input = assetManager.open(file);
InputStreamReader reader = new InputStreamReader(input, "UTF-8");
int size = input.available();
char[] buffer = new char[size];
reader.read(buffer);
reader.close();

String text = new String(buffer);

txtIta.setText(text);

} catch (IOException e) {
e.printStackTrace();
}

mocelet
28/06/13, 12:18:20
Lo cierto es que es hubiera sido más fácil poner la codificación en el constructor de String xD El Reader es matar moscas a cañonazos y realmente el tamaño del array en char no es correcto (normalmente será mayor que lo que debería ser, si bien no es un problema y por eso funciona)


InputStream input;
try {
input = assetManager.open(file);
int size = input.available();
byte[] buffer = new byte[size];
input.read(buffer);
input.close();
String text = new String(buffer, "UTF-8");
txtIta.setText(text);

} catch (IOException e) {
e.printStackTrace();
}


Todos los caminos llevan a Roma en cualquier caso