Codificación Utf-8 para Android

Tengo un problema con utf-8 de codificación.

Recupero desde una base de datos MySQL datos formateados en UTF-8 (con una gran cantidad de símbolos chinos) con Java y los pongo en algunos archivos txt: (este es un ejemplo .. tengo un montón de datos)

String name = null; ResultSet res = stat.executeQuery("Some_SQL"); nomeImg = res.getString("value"); PrintWriter = new new PrintWriter(new FileOutputStream("file_name.txt")); out.println(name); 

con estos archivos txt voy a crear algunos TextView que uso para poblar algunas actividades en mi aplicación Android, pero no todos los símbolos se muestran correctamente: la mayoría de ellos son correctos, pero algunos no son reconocidos y se muestra como un negro diamante con un signo de interrogación blanco adentro.

También he intentado con esto: pero me dieron peores resultados

 byte[] name = null; ResultSet res = stat.executeQuery("Some_SQL"); nomeImg = res.getString("value").getBytes("UTF-8"): BufferedWriter = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("file_name.txt"), "UTF-8")); out.write(new String(name, "UTF-8")+"\n"); 

¿Alguien tiene alguna idea? ¡Gracias!

editar i conectar a mi base de datos con:

 Connection con = DriverManager.getConnection("jdbc:mysql://url:port?useUnicode=true&characterEncoding=utf-8", user, pass); 

y cuando ejecuto en el DB la consulta:

 SELECT default_character_set_name FROM information_schema.SCHEMATA S WHERE schema_name = "schema_name"; 

yo obtengo el resultado

 utf8 

así que creo que DB está codificado en UTF-8 y mi conexión a él puede manejar UTF-8

Usted necesita calcular hacia fuera en qué fase esto sucede: 1- Donde usted carga el texto de la base de datos, y 2- donde usted los escribe al archivo.

Una cosa a tener en cuenta es que su base de datos debe ser creado con UTF-8 de codificación y su conexión también debe apoyar. Un ejemplo de URL de conexión JDBC que admite UTF-8 puede ser:

 jdbc:mysql://hostname:port/schema?useUnicode=yes&characterEncoding=utf-8 

El síntoma que está observando después de especificar la codificación en getBytes ("UTF-8") es una clara indicación de que lo que se obtiene de la base de datos no está en UTF-8.

También intenta convertir desde una codificación que sospecha que los datos están en (como ISO-8859-1):

 new String(request.getParameter("value").getBytes("ISO-8859-1"), "UTF-8"); 

@ houman001 tiene razón. Usted debe tener cuidado durante ese dos procedimiento.

En adición:

Tengo el mismo problema con el texto árabe antes de algunos días. Pero ahora lo he resuelto. Tengo que resolverlo por lo que es para escribir en la base de datos con codificación UTF-8. y también tienen uso de alguna fuente árabe dada por mi desarrollador de fuentes. Que me lleve al texto en árabe como quiero.

Por lo tanto, tenga cuidado durante el análisis y la transferencia de datos de uno a otro y asegúrese de que está en formato de codificación UTF-8.

Espero que esta cosa te ayude.

para la conexión a la base de datos, he utilizado esto para todos los UTF-8 y funciona bien

Esta es una clase que puede utilizar, simplemente editar la información acerca de su nombre de usuario, passwor y nombre de la base de datos

 String unicode = "?useUnicode=yes&characterEncoding=UTF-8"; String driverName = "com.mysql.jdbc.Driver"; String hostName = "localhost"; String port = "3306"; String databaseName = "yourDatabaseName"; String userName = "yourusername"; String password = "yourpassword"; String databaseType = "jdbc:mysql"; public Connection con; public Database() { try { Class.forName("com.mysql.jdbc.Driver"); con = (Connection) DriverManager.getConnection( "jdbc:mysql://localhost:3306/yourdatabasename" + unicode, "yourusername", "yourpassword"); } catch (ClassNotFoundException e) { System.err .println("exception Class (" + driverName + ") not found"); e.printStackTrace(); } catch (SQLException e) { System.err.println("exception Connection URL"); e.printStackTrace(); } } 

cuando desee enviar datos desde el servidor a android, intente esto

 ServletOutputStream out = response.getOutputStream(); out.println(URLEncoder.encode(yourString,"UTF-8")); 

en el android (o cualquier reciever de los datos) intente esto

 String dd = URLDecoder.decode(yourReturnedData, "UTF-8"); 

editar

para usted el código usted puede agregar esto

 name = URLDecoder.decode(name, "UTF-8"); 
  • ¿Cómo usar unicode en los recursos de Android?
  • Java - Convertir cadena a objeto URI válido
  • Codificación UTF-8 en WebView e ICS
  • ¿Cómo puedo poner utf-16 caracteres en Android cadena de recursos?
  • Extraño problema de codificación JSON en Android 4.1.2
  • Solicitud de aplicaciones para Android Servicio WCF (SerializationException - utf-8 related)
  • Codifique el cuerpo del mensaje SMS de ContentResolver en UTF-8
  • Android muestra texto en una codificación incorrecta después de la actualización a Java 8
  • Cómo convertir una cadena UTF a ANSI y crear un archivo de texto ANSI en SSD con JAVA-ANDROID
  • Android - Cómo convertir la cadena en utf-8 en android
  • Detectar subrogados altos en una cadena utilizando expresiones regulares
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.