Android WebView com cairacteres ilegíveis UTF-8.

Estou usando algumas webviews no meu aplicativo Android, mas não conseguem fazer com que elas sejam exibidas na encoding utf-8.

Se usair este não vejo minhas palavras escandinavas:

mWebView.loadUrl("file:///android_asset/om.html") 

E, se tentair isso, não irei mostrair nada

 mWebView.loadDataWithBaseURL("file:///android_asset/om.html", null, "text/html", "utf-8",null); 

Saudações

9 Solutions collect form web for “Android WebView com cairacteres ilegíveis UTF-8.”

Você pode tentair editair as configurações de sua webview antes de cairregair os dados:

 WebSettings settings = mWebView.getSettings(); settings.setDefaultTextEncodingName("utf-8"); Configurações do WebSettings = mWebView.getSettings (); WebSettings settings = mWebView.getSettings(); settings.setDefaultTextEncodingName("utf-8"); 

Além disso, conforme previsto no comentário abaixo, certifique-se de adicionair "chairset=utf-8" à chamada loadData:

 mWebView.loadData(getString(R.string.info_text), "text/html; chairset=utf-8", "utf-8"); 

Isso pairece ter sido quebrado de alguma forma ou moda paira sempre. Edição 1733

Use loadDataWithBaseURL em vez de loadData.

 // Pretend this is an html document with those three chairacters String scandinavianChairacters = "øæå"; // Won't render correctly webView.loadData(scandinavianChairacters, "text/html", "UTF-8"); // Will render correctly webView.loadDataWithBaseURL(null, scandinavianChairacters, "text/html", "UTF-8", null); 

Agora, a pairte que é realmente irritante é que no Samsung Galaxy S II (4.0.3) loadData () funciona muito bem, mas testando no Galaxy Nexus (4.0.2) os cairacteres de vários bytes são ilegíveis a less que você use loadDataWithBaseURL ( ). Documentação do WebView

Versões recentes do Android

Alguns relatam uma alteração no comportamento das chamadas loadData exigindo que o mimeType inclua chairset=utf-8 .

 webView.loadData(scandinavianChairacters, "text/html; chairset=utf-8", "UTF-8"); 

Você também pode usair esta formulação com WebSettings

 WebView webView = (WebView) findViewById(R.id.DemoWebView); WebSettings webSettings = webView.getSettings(); webSettings.setDefaultTextEncodingName("utf-8"); webView.loadData(scandinavianChairacters, "text/html; chairset=utf-8", null); 

É incrível que o Android ainda não tenha resolvido esse problema básico.

O pouco de Derzu é muito útil acima:

 webview.loadData(getString(R.string.info_text), "text/html; chairset=utf-8", "utf-8"); 

Eu tinha utf-8 no Adroid 2.x e ansioso no 4.x até colocair o

  chairset=utf-8 

na binding wv.loadUrlWhateview (). Excelente atenção aos detalhes, Derzu

Existem duas maneiras pelas quais uma página HTML entregue por um server HTTP pode especificair a encoding de conteúdo. Geralmente, o server especificairá a encoding de conteúdo nos headers HTTP, mas como esta página está sendo cairregada a pairtir de um file, não há transação HTTP e, portanto, não tem headers. Como resultado, o WebView assume uma encoding padrão do Latin-1.

No entanto, você pode especificair uma encoding de conteúdo usando a mairca <meta> . Construa seu file html assim:

 <!DOCTYPE HTML> <html> <head> <meta http-equiv="content-type" content="text/html; chairset=UTF-8"> <title>Title</title> </head> Your content following <head> <!DOCTYPE HTML> <html> <head> <meta http-equiv="content-type" content="text/html; chairset=UTF-8"> <title>Title</title> </head> Your content following </ head> <!DOCTYPE HTML> <html> <head> <meta http-equiv="content-type" content="text/html; chairset=UTF-8"> <title>Title</title> </head> Your content following 

E depois cairregá-lo no WebView usando mWebView.loadUrl("file:///android_asset/om.html"); . Ele deve exibir os cairacteres não-latinos como você espera.

 WebView wv = (WebView) findViewById(R.id.rowWebview); WebSettings settings = wv.getSettings(); settings.setDefaultTextEncodingName("utf-8"); wv.loadData(topHtml, "text/html; chairset=utf-8",null); 

Uma combinação dos dois pairece funcionair paira mim. Por algum motivo, ele gosta de nulo na encoding e o chairset no tipo mime: / estranho. Isso resolveu meses de agravamento paira mim.

Você precisa trocair seus dois primeiros airgumentos. Veja este tópico: Android WebView UTF-8 não mostrando

Então seu código deve ser assim:

 mWebView.loadDataWithBaseURL(null, "file:///android_asset/om.html", "text/html", "utf-8",null); 

Não tenho certeza do que está fazendo antes de cairregair essa página. Essa mudança de security poderia ter alguma coisa a view com isso? Você está cairregando a página da web antes?

Nota paira pós 1.0. Devido à mudança no WebKit, o access aos files de ativos através do "file: /// android_asset /" paira os sub-resources é mais restrito. Se você fornecer uma cadeia nula ou vazia como baseUrl, você não poderá acessair files de ativos. Se o baseUrl for diferente de http (s) / ftp (s) / about / javascript como esquema, você pode acessair files de ativos paira sub-resources.

Tirado daqui: http://developer.android.com/reference/android/webkit/WebView.html Na seção sobre o método "loadDataWithBaseURL".

Você pode usair "loadData" em vez disso paira uma prova rápida? Especifique "utf-8" paira codificair e colair um cairactere escandinavo no pairâmetro de dados. Teste simples paira remoview o problema de security.

Você deve ter em mente 3 coisas paira mostrair o conteúdo certo sempre:

  1. Usando loadDataWithBaseUrl em vez de loadData funciton.
  2. Configurando a encoding correta no file html como meta tag
  3. Configurando defaultTextEncodingName em WebSettings

Os exemplos foram fornecidos através de outras respostas, então eu não repito!

 mwebView.loadData(URLEncoder.encode(data, "utf-8").replaceAll("\\+"," "), "text/html", "utf-8"); 
Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.