¿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.

¿Puede alguien proporcionarme un ejemplo o un enlace a la documentación relevante?

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í:

http://code.google.com/p/android/issues/entry

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.

  • JNI se bloquea cuando se llama con un argumento String
  • Falta el menú "Annotation processing" en eclipse
  • Forzar a GSON a usar Constructor que contenga Setters o Setters en general, en lugar de Fields
  • Android-library con la dependencia específica de Flavors de Producto
  • Establezca onItemClick en Adaptador personalizado ListView
  • Cancelar AsyncTask después de algún tiempo
  • Gradle build falló en Android Studio 1.5.1
  • ¿Cómo programar tematicamente una actividad para ser como un diálogo?
  • No se puede instalar Android Studio en Ubuntu
  • ¿Cómo utilizar las variables estáticas de manera eficiente?
  • Uso de XML simple y obtención de NoClassDefFoundError en Android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.