Androide. WebView y loadData

Es posible usar el siguiente método para la configuración del contenido de una vista web loadData (String data, String mimeType, String encoding)

¿Cómo manejar el problema con una encoding desconocida de datos html?

¿Hay una lista de codificaciones?

Sé por mi universidad que en mi caso html viene de DB y está codificado con latin-1. Intento establecer el parámetro de encoding en latin-1, en ISO-8859-1 / iso-8859-1, pero todavía tengo problemas para mostrar signos especiales como ä, ö, ü.

Estaré muy agradecido por cualquier consejo.

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

Esto funciona sin problemas, especialmente en Android 4.0, que aparentemente ignora la encoding de caracteres dentro de HTML.

Probado en 2.3 y 4.0.3.

De hecho, no tengo idea de qué otros valores además de “base64” toma el último parámetro. Algunos ejemplos de Google ponen null allí.

WebView.loadData () no funciona correctamente en absoluto. Lo que tenía que hacer era:

 String header = ""; myWebView.loadData(header+myHtmlString, "text/html", "UTF-8"); 

Creo que en su caso debe reemplazar UTF-8 con latin1 o ISO-8859-1 tanto en el encabezado como en WebView.loadData ().

Y, para dar una respuesta completa, aquí está la lista oficial de codificaciones: http://www.iana.org/assignments/character-sets

Actualizo mi respuesta para ser más inclusivo:

Para usar WebView.loadData () con codificaciones que no sean latin1, debe codificar el contenido html. El ejemplo anterior no funcionaba correctamente en Android 4+, por lo que lo he modificado para que se vea de la siguiente manera:

 WebSettings settings = myWebView.getSettings(); settings.setDefaultTextEncodingName("utf-8"); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.FROYO) { String base64 = Base64.encodeToString(htmlString.getBytes(), Base64.DEFAULT); myWebView.loadData(base64, "text/html; charset=utf-8", "base64"); } else { String header = ""; myWebView.loadData(header + htmlString, "text/html; charset=UTF-8", null); } 

Pero más tarde cambié a WebView.loadDataWithBaseURL () y el código se volvió muy limpio y no dependía de la versión de Android:

 WebSettings settings = myWebView.getSettings(); settings.setDefaultTextEncodingName("utf-8"); myWebView.loadDataWithBaseURL(null, htmlString, "text/html", "utf-8", null); 

Por alguna razón, estas funciones tienen una implementación completamente diferente.

Según lo entiendo, loadData() simplemente genera un data: URL con los datos proporcionados.

Lea los javadocs para loadData() :

Si el valor del parámetro de encoding es ‘base64’, entonces los datos deben estar codificados como base64. De lo contrario, los datos deben usar encoding ASCII para octetos dentro del rango de caracteres URL seguros y usar la encoding hexadecimal% xx estándar de URL para octetos fuera de ese rango. Por ejemplo, ‘#’, ‘%’, ‘\’, ‘?’ debe ser reemplazado por% 23,% 25,% 27,% 3f respectivamente.

El URL del esquema de ‘datos’ formado por este método usa el juego de caracteres US-ASCII predeterminado. Si necesita establecer un juego de caracteres diferente, debe formar un esquema URL de datos que especifique explícitamente un parámetro de juego de caracteres en la porción de tipo de medio de la URL y llame a loadUrl (String) en su lugar. Tenga en cuenta que el conjunto de caracteres obtenido de la parte del tipo de medio de una URL de datos siempre anula la especificada en el documento HTML o XML.

Por lo tanto, debe usar US-ASCII y escapar de los caracteres especiales usted mismo, o simplemente codificar todo usando Base64. Lo siguiente debería funcionar, suponiendo que use UTF-8 (no lo he probado con latin1):

 String data = ...; // the html data String base64 = android.util.Base64.encodeToString(data.getBytes("UTF-8"), android.util.Base64.DEFAULT); webView.loadData(base64, "text/html; charset=utf-8", "base64"); 

Tengo este problema, pero:

 String content = ""; content += mydata + ""; WebView1.loadData(content, "text/html", "UTF-8"); 

no funciona en todos los dispositivos. Y fusiono algunos métodos:

 String content = ""+ ""+ ""+ ""; content += myContent + ""; WebView WebView1 = (WebView) findViewById(R.id.webView1); WebView1.loadData(content, "text/html; charset=utf-8", "UTF-8"); 

¡Funciona! 🙂 Gracias

usa esto: String customHtml = text;

  wb.loadDataWithBaseURL(null,customHtml,"text/html", "UTF-8", null); 
  String strWebData="html...." //**Your html string** WebView webDetail=(WebView) findViewById(R.id.webView1); WebSettings websetting = webDetail.getSettings(); websetting.setDefaultTextEncodingName("utf-8"); webDetail.loadData(strWebData, "text/html; charset=utf-8", null); 

las respuestas anteriores no funcionan en mi caso. Debes especificar utf-8 en metaetiqueta

         

webview.loadDataWithBaseURL (null, texto, “texto / html”, “UTF-8”, nulo);