¿Cómo leer y escribir UTF-8 al disco en el Android?
No puedo leer y escribir caracteres extendidos (caracteres acentuados en francés, por ejemplo) en un archivo de texto utilizando los métodos estándar de InputStreamReader mostrados en los ejemplos de la API de Android. Cuando lea el archivo con:
InputStreamReader tmp = new InputStreamReader(in); BufferedReader reader = new BufferedReader(tmp); String str; while ((str = reader.readLine()) != null) { ...
La cadena de lectura se trunca en los caracteres extendidos en lugar de en el final de línea. La segunda mitad de la cuerda viene entonces en la línea siguiente. Estoy asumiendo que tengo que persistir mis datos como UTF-8, pero no puedo encontrar ningún ejemplo de eso, y soy nuevo en Java.
- No se puede obtener la calidad de imagen completa de la cadena base64
- ¿Error de eliminación o éxito de ContentProviderResult ?
- Android WebView - con proxy autenticado
- Flurry Agent que causa una excepción CalledFromWrongThreadException en Android 2.3.4
- Cómo hacer que una aplicación funcione por solo 3 días
¿Puede alguien proporcionarme un ejemplo o un enlace a la documentación relevante?
- Lectura de un archivo XML desde recursos
- Android - ¿Cómo obtener un contacto del registro de llamadas?
- La forma más rápida de encontrar si int array contiene un número
- Obtener ancho de pantalla Android en inmersiones
- Necesidad de manejar el clic de la clase NON-Activity (.java)
- ¿Qué es la devolución de llamada en Android?
- ¿Cómo descodificar de manera fiable los códigos de barras PDF417 en Android usando software (no Zxing)?
- ¿Cómo silenciar la notificación al pulsar el botón de volumen?
Muy simple y directo. 🙂
String filePath = "/sdcard/utf8_file.txt"; String UTF8 = "utf8"; int BUFFER_SIZE = 8192; BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(filePath), UTF8),BUFFER_SIZE); BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(filePath), UTF8),BUFFER_SIZE);
Cuando instancia el InputStreamReader
, utilice el constructor que toma un conjunto de caracteres.
InputStreamReader tmp = new InputStreamReader(in, "UTF-8");
Y hacer una cosa similar con OutputStreamWriter
Me gusta tener un
public static final Charset UTF8 = Charset.forName("UTF-8");
En alguna clase de utilidad en mi código, para que pueda llamar (ver más en el Doc )
InputStreamReader tmp = new InputStreamReader(in, MyUtils.UTF8);
Y no tener que manejar UnsupportedEncodingException
cada vez.
Esto sólo debería funcionar en Android, incluso sin especificar explícitamente UTF-8, porque el conjunto de caracteres predeterminado es UTF-8. Si puede reproducir este problema, por favor, plantee un error con un caso de prueba reproducible aquí:
Si usted hace frente a tal clase de problema intente hacer esto. Usted tiene que Encode
y Decode
sus datos en Base64
. Esto funcionó para mí. Puedo compartir el código si lo necesitas.
Compruebe la codificación de su archivo haciendo clic derecho en el Explorador de proyectos y seleccionando propiedades. Si no es la codificación correcta tendrá que volver a introducir sus caracteres especiales después de cambiarlo, o al menos eso fue mi experiencia.
- Java.lang.RuntimeException: Paralleable encontró IOException escribiendo objeto serializable en Android que pasa el objeto ArrayList
- Problemas con FragmentPagerAdapter