programacion - Android WebView UTF-8 no se muestra
programacion android pdf 2018 (2)
Tengo una vista web y estoy tratando de cargar texto UTF-8 simple en ella.
mWebView.loadData("將賦予他們的傳教工作標示為", "text/html", "UTF-8");
Pero WebView muestra basura ANSI / ASCII.
Obviamente es un problema de codificación, pero ¿qué me falta al decirle al sitio web que muestre el texto Unicode?
Esta es una aplicación HelloWorld.
Este problema se remonta al menos a Gingerbread
Esto parece haberse roto de alguna forma o moda para siempre. Número 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 verdaderamente molesta es que en el Samsung Galaxy S II (4.0.3) loadData () funciona bien, pero probando en el Galaxy Nexus (4.0.2) los caracteres de múltiples bytes son ilegibles a menos que uses loadDataWithBaseURL ( ) Documentación de WebView
Versiones recientes de Android
Algunos informan un cambio en el comportamiento de las llamadas loadData que requieren que mimeType incluya charset=utf-8
.
webView.loadData(scandinavianCharacters, "text/html; charset=utf-8", "UTF-8");
Discusión
La primera vez que vi esto, mi jefe me trajo su teléfono, uno de los primeros Nexus, mientras estaba desarrollando en ese momento en un Samsung Galaxy II y apareció en nuestras noticias económicas en su teléfono que tenía muchos caracteres que no eran ASCII . Por lo tanto, no solo es un problema de larga data dentro de Android, sino que tampoco es consistente entre los fabricantes de dispositivos. Este es un asunto donde tienes que programar a la defensiva.
Utilizar:
mWebView.loadDataWithBaseURL(null, "將賦予他們的傳教工作標示為", "text/html", "utf-8", null);
o usando WebSettings con setDefaultTextEncoding :
WebSettings settings = mWebView.getSettings();
settings.setDefaultTextEncodingName("utf-8");
Para versiones recientes de Android, API 16 a 22 fue probado y funciona correctamente utilizando el método loadData (), requiere que mimeType incluya: "charset = utf-8".
WebView mWebView = (WebView) findViewById(R.id.myWebView);
WebSettings settings = mWebView.getSettings();
settings.setDefaultTextEncodingName("utf-8");
mWebView.loadData(myCharacters, "text/html; charset=utf-8",null);
o
mWebView.loadData(myCharacters, "text/html; charset=utf-8","UTF-8");