Home Menu

Menu



Programación y Desarrollo para Android Subforo exclusivo para temas de programación de software para PDAs y desarrollo de aplicaciones, interfaces, etc bajo Android


 
Herramientas
  #1  
Viejo 28/06/13, 11:26:41
Avatar de davidddp
davidddp davidddp no está en línea
Miembro del foro
Mensajes: 56
Compra y venta: (2)
 
Fecha de registro: jun 2010
Localización: Santa Amalia
Mensajes: 56
Modelo de smartphone: Huawei P20 Pro
Tu operador: Orange
Mencionado: 0 comentarios
Tagged: 0 hilos
Leer caracteres especiales de un Assets .txt

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:

Código:
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();
		}
Imágenes Adjuntas
Tipo de Archivo: jpg Aiuta.jpg (58.4 KB, 33 visitas)
Responder Con Cita


  #2  
Viejo 28/06/13, 11:34:19
Avatar de mocelet
mocelet mocelet no está en línea
Desarrollador
Mensajes: 2,203
 
Fecha de registro: may 2011
Localización: Madrid
Mensajes: 2,203
Tu operador: -
Mencionado: 17 comentarios
Tagged: 2 hilos
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
Responder Con Cita
Gracias de parte de:
  #3  
Viejo 28/06/13, 11:53:31
Avatar de davidddp
davidddp davidddp no está en línea
Miembro del foro
Mensajes: 56
Compra y venta: (2)
 
Fecha de registro: jun 2010
Localización: Santa Amalia
Mensajes: 56
Modelo de smartphone: Huawei P20 Pro
Tu operador: Orange
Mencionado: 0 comentarios
Tagged: 0 hilos
PERFECTO Mocelet! Gracias. Indico el código por si alguien tiene el mismo problema:

Código:
	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();
		}
Responder Con Cita
  #4  
Viejo 28/06/13, 12:18:20
Avatar de mocelet
mocelet mocelet no está en línea
Desarrollador
Mensajes: 2,203
 
Fecha de registro: may 2011
Localización: Madrid
Mensajes: 2,203
Tu operador: -
Mencionado: 17 comentarios
Tagged: 2 hilos
Lo cierto es que es hubiera sido más fácil poner la codificación en el constructor de String 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)

Código:
                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

Última edición por mocelet Día 28/06/13 a las 12:20:57
Responder Con Cita
Gracias de parte de:
Respuesta

Estás aquí
Regresar   HTCMania > Todo sobre Android > Programación y Desarrollo para Android


Reglas de Mensajes
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Las caritas están On
Código [IMG] está On
Código HTML está Off

Saltar a Foro



Hora actual: 12:45:34 (GMT +1)

Cookies
Powered by vBulletin™
Copyright © vBulletin Solutions, Inc. All rights reserved.
 
HTCMania: líderes desde el 2007