Estoy usando algunas vistas web en mi aplicación de Android, pero no puedo hacer que se muestren en codificación utf-8.
Si uso este, no veré mis caracteres escandinavos:
mWebView.loadUrl("file:///android_asset/om.html")
Y si prueba este, no se mostrará nada en absoluto.
mWebView.loadDataWithBaseURL("file:///android_asset/om.html", null, "text/html", "utf-8",null);
Saludos
Respuestas:
Puede intentar editar la configuración de su vista web antes de cargar los datos:
WebSettings settings = mWebView.getSettings(); settings.setDefaultTextEncodingName("utf-8");
Además, como se
"charset=utf-8"
indica en el comentario a continuación, asegúrese de agregar a la llamada loadData:mWebView.loadData(getString(R.string.info_texto), "text/html; charset=utf-8", "utf-8");
fuente
loadDataWithBaseURL()
enfoque sugerido por Cameron .Esto parece haberse roto de alguna forma para siempre. Edición 1733
Utilice loadDataWithBaseURL en lugar de loadData.
// Pretend this is an html document with those three characters String scandinavianCharacters = "øæå"; // Won't render correctly webView.loadData(scandinavianCharacters, "text/html", "UTF-8"); // Will render correctly webView.loadDataWithBaseURL(null, scandinavianCharacters, "text/html", "UTF-8", null);
Ahora, la parte que es realmente molesta es que en el Samsung Galaxy S II (4.0.3) loadData () funciona bien, pero las pruebas en el Galaxy Nexus (4.0.2) los caracteres multibyte se distorsionan a menos que use loadDataWithBaseURL ( ). Documentación de WebView
Versiones recientes de Android
Algunos informan un cambio en el comportamiento de las llamadas loadData que requieren
mimeType
que se incluyacharset=utf-8
.webView.loadData(scandinavianCharacters, "text/html; charset=utf-8", "UTF-8");
También puede utilizar esta formulación con
WebSettings
WebView webView = (WebView) findViewById(R.id.DemoWebView); WebSettings webSettings = webView.getSettings(); webSettings.setDefaultTextEncodingName("utf-8"); webView.loadData(scandinavianCharacters, "text/html; charset=utf-8", null);
Es sorprendente que Android todavía no haya resuelto este problema básico.
fuente
text/html; charset=utf-8
trabajó.El bit de Derzu es muy útil arriba:
webview.loadData(getString(R.string.info_texto), "text/html; charset=utf-8", "utf-8");
Tenía utf-8 en Adroid 2.xy ansi confuso en 4.x hasta que puse el
charset=utf-8
en la llamada wv.loadUrlWhatever (). Excelente atención al detalle, Derzu
fuente
Hay dos formas en que una página HTML entregada por un servidor HTTP puede especificar la codificación del contenido. Por lo general, el servidor especificará la codificación del contenido en los encabezados HTTP, pero como esta página se carga desde un archivo, no hay transacción HTTP y, por lo tanto, no hay encabezados. Como resultado, WebView asume una codificación predeterminada de Latin-1.
Sin embargo, puede especificar una codificación de contenido mediante la
<meta>
etiqueta. Construya su archivo html así:<!DOCTYPE HTML> <html> <head> <meta http-equiv="content-type" content="text/html; charset=UTF-8"> <title>Title</title> </head> Your content following
Y luego cárguelo en WebView usando
mWebView.loadUrl("file:///android_asset/om.html");
. Debería mostrar los caracteres no latinos como esperas.fuente
WebView wv = (WebView) findViewById(R.id.rowWebview); WebSettings settings = wv.getSettings(); settings.setDefaultTextEncodingName("utf-8"); wv.loadData(topHtml, "text/html; charset=utf-8",null);
Una combinación de los dos parece funcionar para mí. Por alguna razón, le gusta null en la codificación y el juego de caracteres en el tipo mime: / weird. esto ha resuelto meses de agravamiento para mí.
fuente
meta
etiqueta<meta http-equiv="content-type" content="text/html; charset=UTF-8">
me ayudó cuando estaba usando,loadUrl
pero fue ignorada cuando la uséloadData
(probada en API 16 + 21).Necesita intercambiar sus dos primeros argumentos. Vea este hilo: Android WebView UTF-8 no se muestra
Entonces su código debería verse así:
mWebView.loadDataWithBaseURL(null, "file:///android_asset/om.html", "text/html", "utf-8",null);
fuente
Debes tener en cuenta 3 cosas para mostrar el contenido correcto siempre:
Los ejemplos se han proporcionado a través de otras respuestas, ¡así que no repito!
fuente
No estoy seguro de lo que está haciendo antes de cargar esa página. ¿Podría este cambio de seguridad tener algo que ver con eso? ¿Estás cargando una página desde la web antes?
Nota para la publicación 1.0. Debido al cambio en WebKit, el acceso a los archivos de activos a través de "file: /// android_asset /" para los recursos secundarios está más restringido. Si proporciona una cadena nula o vacía como baseUrl, no podrá acceder a los archivos de activos. Si baseUrl no es http (s) / ftp (s) / about / javascript como esquema, puede acceder a los archivos de activos para los recursos secundarios.
Tomado de aquí: http://developer.android.com/reference/android/webkit/WebView.html En la sección sobre el método "loadDataWithBaseURL".
¿Puede utilizar "loadData" en su lugar para una prueba rápida? Especifique "utf-8" para codificar y pegar un carácter escandinavo en el parámetro de datos. Prueba simple para eliminar el problema de seguridad.
fuente
mwebView.loadData(URLEncoder.encode(data, "utf-8").replaceAll("\\+"," "), "text/html", "utf-8");
fuente