Android WebView UTF-8 no se muestra

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 encoding, pero ¿qué me falta al decirle al sitio web que muestre el texto Unicode?

Esta es una aplicación HelloWorld.

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

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 progtwigr a la defensiva.