studio software based app android encoding webview

software - Androide. WebView y loadData



javascript webview android (8)

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

Lea los WebView.loadData() para loadData() :

Si el valor del parámetro de codificación es ''base64'', entonces los datos deben estar codificados como base64. De lo contrario, los datos deben usar codificación ASCII para octetos dentro del rango de caracteres URL seguros y usar la codificación 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");

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 codificación 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 codificación 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.


Tengo este problema, pero:

String content = "<html><head><meta http-equiv=/"content-type/" content=/"text/html; charset=utf-8/" /></head><body>"; content += mydata + "</body></html>"; WebView1.loadData(content, "text/html", "UTF-8");

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

String content = "<?xml version=/"1.0/" encoding=/"UTF-8/" ?>"+ "<html><head>"+ "<meta http-equiv=/"content-type/" content=/"text/html; charset=utf-8/" />"+ "</head><body>"; content += myContent + "</body></html>"; WebView WebView1 = (WebView) findViewById(R.id.webView1); WebView1.loadData(content, "text/html; charset=utf-8", "UTF-8");

¡Funciona! :) Gracias


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

String header = "<?xml version=/"1.0/" encoding=/"UTF-8/" ?>"; 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 = "<?xml version=/"1.0/" encoding=/"UTF-8/" ?>"; myWebView.loadData(header + htmlString, "text/html; charset=UTF-8", null); }

Pero más tarde WebView.loadDataWithBaseURL() 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.


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

<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> </head> <body> <!-- you content goes here --> </body> </html>


usa esto: String customHtml = text;

wb.loadDataWithBaseURL(null,customHtml,"text/html", "UTF-8", null);


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


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);


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

Esto funciona sin problemas, 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 idea de qué otros valores además de "base64" toma el último parámetro. Algunos ejemplos de Google ponen null allí.