web-dev-qa-db-de.com

Codierungsproblem mit loadData von WebView

Ich lade einige Daten mit Latin-1-Zeichen in eine WebView-Anwendung

String uri = Uri.encode(html);
webview.loadData(uri, "text/html", "ISO-8859-1");

Bei der Anzeige werden die latein1-Zeichen durch komische Zeichen ersetzt.

Wenn ich die HTML-Datei direkt in eine Textansicht lade (nur zum Testen), werden lateinische Zeichen korrekt angezeigt.

Jeder kann helfen?

Vielen Dank

html:

<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE html PUBLIC "-//WAPFORUM//DTD XHTML Mobile 1.0//EN" "http://www.wapforum.org/DTD/xhtml-mobile10.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">

    <!-- some html -->

</html>
21
jul

Nur so kann es funktionieren, wie kommentiert hier :

webview.loadDataWithBaseURL("fake://not/needed", html, "text/html", "utf-8", "");

Keine URI-Codierung, utf-8 ... loadData-Fehler?

34
jul
myWebView.loadData(myHtmlString, "text/html; charset=UTF-8", null);

Dies funktioniert einwandfrei, insbesondere auf Android 4.0, bei dem die Zeichencodierung inside HTML ignoriert wird.

Getestet am 2.3 und 4.0.3.

Tatsächlich habe ich keine Ahnung, welche anderen Werte außer "base64" der letzte Parameter verwendet. Einige Google-Beispiele setzen dort null.

Sie sollten immer die UTF-8-Codierung verwenden. Jede andere Zeichencodierung ist bereits seit vielen Jahren veraltet.

52
patryk
String start = "<html><head><meta http-equiv='Content-Type' content='text/html' charset='UTF-8' /></head><body>";
String end = "</body></html>";

webcontent.loadData(start+ YOURCONTENT + end, "text/html; charset=UTF-8", null);

Eine Lösung des Problems.

14
Göksel Güren

Ich habe Display © 2011 und es wurde © angezeigt. 

Mit dem folgenden Code habe ich den korrekten Wert erreicht © 2011

webViewContent.loadDataWithBaseURL(null, html, "text/html", "utf-8", null);
7
Pritesh Shah
webView.loadDataWithBaseURL(null, html, "text/html", "utf-8", null); 
1
Mahmoud Badri

AFAIK das: Zuerst wird die loadData () -Methode verwendet, um HTML-Code zu laden. 
Zweitens, setzen Sie einfach den HTML-Code direkt in die loadData () -Datei und verschlüsseln Sie sie nicht 

Vielleicht möchten Sie es so versuchen:

webview.loadData(uri, "text/html", "ISO-8859-1");

Prost!

0
Pete Houston

Info aus Java-Dokumenten über die loadData-Methode

Lädt die angegebenen Daten mit einer "Daten" -Schema-URL in diese WebView. 

Beachten Sie, dass die gleiche Origin-Richtlinie von JavaScript bedeutet, dass ein Skript, das in Einer mit dieser Methode geladenen Seite ausgeführt wird, nicht auf den Inhalt Zugreifen kann, der mit einem anderen Schema als 'data' geladen wurde, einschließlich 'http (s)'. . Um Diese Einschränkung zu umgehen, verwenden Sie loadDataWithBaseURL () mit einer entsprechenden Basis-URL. 

Der Parameter encoding gibt an, ob die Daten base64 oder URL Codiert sind. Wenn die Daten base64-codiert sind, muss der Wert des Parameters Der Codierung 'base64' sein. Für alle anderen Werte des Parameters Einschließlich null wird angenommen, dass die Daten ASCII-Kodierung für Oktette innerhalb des Bereichs sicherer URL-Zeichen verwenden und den Standard % xx Hex-Codierung von URLs für Oktette außerhalb dieses Bereichs. Zum Beispiel, '#', '%', '\', '?' sollte durch% 23,% 25,% 27,% 3f ersetzt werden. 

Die mit dieser Methode gebildete URL für das Datenschema verwendet den Standard-Zeichensatz US-ASCII . Wenn Sie einen anderen Zeichensatz festlegen müssen, müssen Sie Eine "Daten" -Schema-URL bilden, die explizit einen Zeichensatzparameter in Dem Mediatyp-Teil der URL angibt, und rufen stattdessen loadUrl (String) auf. Beachten Sie, dass der Zeichensatz, der aus dem Mediatyp-Abschnitt einer -Daten-URL abgerufen wird, immer den im HTML- oder XML-Dokument Selbst angegebenen Wert überschreibt.

Der folgende Code hat für mich funktioniert.

String base64EncodedString = null;
                        try {
                            base64EncodedString = Android.util.Base64.encodeToString((preString+mailContent.getBody()+postString).getBytes("UTF-8"), Android.util.Base64.DEFAULT);
                        } catch (UnsupportedEncodingException e1) {
                            // TODO Auto-generated catch block
                            e1.printStackTrace();
                        }
                        if(base64EncodedString != null)
                        {
                            wvMailContent.loadData(base64EncodedString, "text/html; charset=utf-8", "base64");  
                        }
                        else
                        {
                            wvMailContent.loadData(preString+mailContent.getBody()+postString, "text/html; charset=utf-8", "utf-8");
0
DroidBot

Ich hatte auch das Problem, einen komischen Charakter wie hier und dort zu bekommen. Versuchte verschiedene Optionen, aber die, die funktionierte, ist unten.

String style_sheet_url = "http://something.com/assets/css/layout.css";
    String head = "<head> <meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\" />" + 
            "<link rel=\"stylesheet\" type=\"text/css\" href=\"" + style_sheet_url + "\" /></head>";    
    String locdata = "<html xmlns=\"http://www.w3.org/1999/xhtml\">" + head + "<body>"+ data + "</body></html>";
    wv_news_text.loadData(locdata, "text/html", "utf-8");

wv_news_text ist das WebView.

0
DanKodi