Ich verwende einige Webviews in meiner Android-App, kann sie jedoch nicht in der utf-8-Codierung anzeigen.
Wenn ich dieses benutze, sehe ich meine skandinavischen Zeichen nicht:
mWebView.loadUrl("file:///android_asset/om.html")
Und wenn Sie dies versuchen, wird mir überhaupt nichts angezeigt
mWebView.loadDataWithBaseURL("file:///android_asset/om.html", null, "text/html", "utf-8",null);
Grüße
Antworten:
Sie können versuchen, die Einstellungen Ihrer Webansicht zu bearbeiten, bevor Sie die Daten laden:
WebSettings settings = mWebView.getSettings(); settings.setDefaultTextEncodingName("utf-8");
"charset=utf-8"
Stellen Sie außerdem, wie im Kommentar unten angegeben, sicher, dass Sie dem loadData-Aufruf Folgendes hinzufügen :mWebView.loadData(getString(R.string.info_texto), "text/html; charset=utf-8", "utf-8");
quelle
loadDataWithBaseURL()
Ansatz verwenden .Dies scheint für immer in irgendeiner Form oder Weise gebrochen worden zu sein. Ausgabe 1733
Verwenden Sie loadDataWithBaseURL anstelle von 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);
Der Teil, der wirklich nervt, ist, dass loadData () auf dem Samsung Galaxy S II (4.0.3) einwandfrei funktioniert, beim Testen auf dem Galaxy Nexus (4.0.2) jedoch die Multi-Byte-Zeichen verstümmelt sind, sofern Sie nicht loadDataWithBaseURL ( ). WebView-Dokumentation
Neueste Versionen von Android
Einige berichten , eine Änderung im Verhalten der Anrufe die loaddata erfordern
mimeType
aufzunehmencharset=utf-8
.webView.loadData(scandinavianCharacters, "text/html; charset=utf-8", "UTF-8");
Sie können diese Formulierung auch mit verwenden
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 ist erstaunlich, dass Android dieses grundlegende Problem immer noch nicht gelöst hat.
quelle
text/html; charset=utf-8
hat funktioniert.Derzu's Bit ist oben sehr hilfreich:
webview.loadData(getString(R.string.info_texto), "text/html; charset=utf-8", "utf-8");
Ich hatte utf-8 auf Adroid 2.x und verstümmelte ansi auf 4.x, bis ich das einfügte
charset=utf-8
im Aufruf von wv.loadUrlWhatever (). Hervorragende Liebe zum Detail, Derzu
quelle
Es gibt zwei Möglichkeiten, wie eine von einem HTTP-Server bereitgestellte HTML-Seite die Inhaltscodierung angeben kann. Normalerweise gibt der Server die Inhaltscodierung in den HTTP-Headern an. Da diese Seite jedoch aus einer Datei geladen wird, gibt es keine HTTP-Transaktion und daher keine Header. Infolgedessen geht WebView von einer Standardcodierung von Latin-1 aus.
Sie können jedoch mithilfe des
<meta>
Tags eine Inhaltscodierung angeben . Erstellen Sie Ihre HTML-Datei folgendermaßen:<!DOCTYPE HTML> <html> <head> <meta http-equiv="content-type" content="text/html; charset=UTF-8"> <title>Title</title> </head> Your content following
Und laden Sie es dann mit in WebView
mWebView.loadUrl("file:///android_asset/om.html");
. Es sollte die nicht-lateinischen Zeichen wie erwartet anzeigen.quelle
WebView wv = (WebView) findViewById(R.id.rowWebview); WebSettings settings = wv.getSettings(); settings.setDefaultTextEncodingName("utf-8"); wv.loadData(topHtml, "text/html; charset=utf-8",null);
Eine Kombination aus beiden scheint für mich zu funktionieren. Aus irgendeinem Grund mag es null für die Codierung und den Zeichensatz im MIME-Typ: / seltsam. Dies hat Monate der Erschwerung für mich gelöst.
quelle
meta
Tag hat<meta http-equiv="content-type" content="text/html; charset=UTF-8">
nur geholfen, als ich es verwendet habeloadUrl
, wurde aber bei der Verwendung ignoriertloadData
(getestet auf API 16 + 21).Sie müssen Ihre ersten beiden Argumente austauschen. Siehe diesen Thread: Android WebView UTF-8 wird nicht angezeigt
Ihr Code sollte also folgendermaßen aussehen:
mWebView.loadDataWithBaseURL(null, "file:///android_asset/om.html", "text/html", "utf-8",null);
quelle
Sie sollten drei Dinge beachten, um immer den richtigen Inhalt anzuzeigen:
Die Beispiele wurden über andere Antworten bereitgestellt, damit ich sie nicht wiederhole!
quelle
Ich bin mir nicht sicher, was Sie tun, bevor Sie diese Seite laden. Könnte diese Sicherheitsänderung etwas damit zu tun haben? Laden Sie eine Seite aus dem Web?
Hinweis für Beitrag 1.0. Aufgrund der Änderung im WebKit ist der Zugriff auf Asset-Dateien über "file: /// android_asset /" für die Unterressourcen eingeschränkter. Wenn Sie als baseUrl eine leere oder leere Zeichenfolge angeben, können Sie nicht auf Asset-Dateien zugreifen. Wenn die baseUrl etwas anderes als http (s) / ftp (s) / about / javascript als Schema ist, können Sie auf Asset-Dateien für Unterressourcen zugreifen.
Entnommen von hier: http://developer.android.com/reference/android/webkit/WebView.html Im Abschnitt über die Methode "loadDataWithBaseURL".
Können Sie stattdessen "loadData" für einen schnellen Test verwenden? Geben Sie "utf-8" für die Codierung und Einfügung eines skandinavischen Zeichens in den Datenparameter an. Einfacher Test zum Entfernen des Sicherheitsproblems.
quelle
mwebView.loadData(URLEncoder.encode(data, "utf-8").replaceAll("\\+"," "), "text/html", "utf-8");
quelle