Problema de codificación con LoadData de WebView

Estoy cargando algunos datos, que contienen caracteres latinos-1, en un WebView usando

String uri = Uri.encode(html); webview.loadData(uri, "text/html", "ISO-8859-1"); 

Cuando se muestra, los caracteres latin1 se sustituyen por caracteres extraños.

Si carga el html directamente en un TextView (sólo para probar), los caracteres latinos se muestran correctamente.

¿Alguien puede ayudar?

Gracias

Html:

 <?xml version="1.0" encoding="ISO-8859-1"?> <!DOCTYPE html PUBLIC "-//WAPFORUM//DTD XHTML Mobile 1.0//EN" "http://www.wapforum.org/DTD/xhtml-mobile10.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <!-- some html --> </html> 

 myWebView.loadData(myHtmlString, "text/html; charset=UTF-8", null); 

Esto funciona perfectamente, especialmente en Android 4.0, que aparentemente ignora la codificación de caracteres dentro de HTML.

Probado en 2.3 y 4.0.3.

De hecho, no tengo ni idea de qué otros valores además de "base64" hace el último parámetro. Algunos ejemplos de Google ponen nulo allí.

Siempre debe usar la codificación UTF-8. Cada otra codificación de caracteres se ha vuelto obsoleto desde hace muchos años.

Única manera de tenerlo funcionando, como se ha comentado aquí :

 webview.loadDataWithBaseURL("fake://not/needed", html, "text/html", "utf-8", ""); 

No hay codificación URI, utf-8 … ¿error loadData?

 String start = "<html><head><meta http-equiv='Content-Type' content='text/html' charset='UTF-8' /></head><body>"; String end = "</body></html>"; webcontent.loadData(start+ YOURCONTENT + end, "text/html; charset=UTF-8", null); 

Uno de solución de problema.

Tengo la pantalla © 2011 y estaba mostrando  ©.

Con el siguiente código he conseguido mostrar el valor correcto © 2011

 webViewContent.loadDataWithBaseURL(null, html, "text/html", "utf-8", null); 

AFAIK que: En primer lugar, el método loadData () se utiliza para cargar el código html sin procesar.
En segundo lugar, sólo tiene que poner el código html directamente a la loadData (), no codificarlo

Tal vez quieras probar de esta manera:

 webview.loadData(uri, "text/html", "ISO-8859-1"); 

¡Aclamaciones!

Yo también tenía el problema de conseguir un carácter extraño como  aquí y allí. Probado diferentes opciones, pero el que trabajó es a continuación.

 String style_sheet_url = "http://something.com/assets/css/layout.css"; String head = "<head> <meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\" />" + "<link rel=\"stylesheet\" type=\"text/css\" href=\"" + style_sheet_url + "\" /></head>"; String locdata = "<html xmlns=\"http://www.w3.org/1999/xhtml\">" + head + "<body>"+ data + "</body></html>"; wv_news_text.loadData(locdata, "text/html", "utf-8"); 

Wv_news_text es el WebView.

Información de documentos Java sobre el método loadData

Carga los datos dados en este WebView usando una URL de esquema de "datos".

Tenga en cuenta que la misma política de origen de JavaScript significa que el script que se ejecuta en una página cargada utilizando este método no podrá acceder al contenido cargado utilizando ningún esquema distinto de "datos", incluido "http (s)". Para evitar esta restricción, use loadDataWithBaseURL () con una URL de base apropiada.

El parámetro de codificación especifica si los datos son base64 o URL codificados. Si los datos están codificados en base64, el valor del parámetro de codificación debe ser 'base64'. Para todos los demás valores del parámetro, incluyendo null, se supone que los datos utilizan codificación ASCII para octetos dentro del rango de caracteres de URL seguros y utilizan la codificación hexadecimal estándar de% xx de URLs para octetos fuera de ese rango. Por ejemplo, '#', '%', '\', '?' Deben sustituirse por% 23,% 25,% 27,% 3f respectivamente.

La URL del esquema de datos formada por este método utiliza el conjunto de caracteres US-ASCII predeterminado. Si necesita configurar un conjunto de caracteres diferente, debe formar una URL de esquema de datos que especifique explícitamente un parámetro charset en la parte mediatype de la URL y, en su lugar, llame a loadUrl (String). Tenga en cuenta que el conjunto de caracteres obtenido de la parte mediatype de una URL de datos siempre anula lo especificado en el propio documento HTML o XML.

El siguiente código funcionó para mí.

 String base64EncodedString = null; try { base64EncodedString = android.util.Base64.encodeToString((preString+mailContent.getBody()+postString).getBytes("UTF-8"), android.util.Base64.DEFAULT); } catch (UnsupportedEncodingException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } if(base64EncodedString != null) { wvMailContent.loadData(base64EncodedString, "text/html; charset=utf-8", "base64"); } else { wvMailContent.loadData(preString+mailContent.getBody()+postString, "text/html; charset=utf-8", "utf-8"); 
 webView.loadDataWithBaseURL(null, html, "text/html", "utf-8", null); 
  • Embalaje RAW AAC en el contenedor m4a?
  • Iso-8859-1 vs utf-8 android
  • Grabación de video en un buffer circular en Android
  • StandardCharsets.UTF_8 en API inferior a 19
  • ¿Cómo puedo mostrar símbolos fonéticos (IPA) en Android
  • Cómo obtener los valores de alineación de stride y Y para el codificador de MediaCodec
  • ¿Cómo configurar el MediaRecorder para obtener el mejor efecto de calidad de video?
  • La codificación de html de Android 4.0 se descompone en la vista web
  • Androide. WebView y loadData
  • Android muestra texto en una codificación incorrecta después de la actualización a Java 8
  • Codificación de caracteres predeterminada de Android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.