Подтвердить что ты не робот

Проблема с кодировкой с помощью WebData LoadData

Я загружаю некоторые данные, содержащие латинские символы 1, в WebView, используя

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

При отображении символы latin1 заменяются странными символами.

Если я загружаю html непосредственно в TextView (просто для проверки), латинские символы отображаются правильно.

Кто-нибудь может помочь?

Спасибо

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>
4b9b3361

Ответ 1

Только способ работать, как прокомментировал здесь:

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

Нет кодировки URI, ошибка utf-8... loadData?

Ответ 2

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

Это работает безупречно, особенно на Android 4.0, который, по-видимому, игнорирует кодировку символов внутри.

Протестировано на 2.3 и 4.0.3.

На самом деле, я понятия не имею, какие другие значения, кроме "base64", выполняет последний параметр. В некоторых примерах Google помещается нуль.

Вы всегда должны использовать кодировку UTF-8. Каждое другое кодирование символов устарело уже много лет.

Ответ 3

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

Одно из решений проблемы.

Ответ 4

У меня есть дисплей © 2011, и он показывал Â ©.

С приведенным ниже кодом я достиг отображаемого правильного значения © 2011

webViewContent.loadDataWithBaseURL(null, html, "text/html", "utf-8", null);

Ответ 5

AFAIK: Во-первых, метод loadData() используется для загрузки необработанного HTML-кода.
Во-вторых, просто поместите html-код непосредственно в loadData(), не кодируйте его

Возможно, вы захотите попробовать следующее:

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

Ура!

Ответ 6

У меня тоже возникла проблема получить странный характер, например, здесь и там. Пробовал разные параметры, но тот, который работал, ниже.

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 - это WebView.

Ответ 7

Информация из документов Java о методе loadData​​strong >

Загружает данные в этот WebView, используя URL-адрес схемы данных.

Обратите внимание, что аналогичная исходная политика JavaScript означает, что script работает в страница, загруженная с помощью этого метода, не сможет получить доступ к контенту загружается с использованием любой схемы, отличной от "данных", включая "http (s)". к избегайте этого ограничения, используйте loadDataWithBaseURL() с соответствующим базовый URL.

Параметр encoding указывает, являются ли данные base64 или URL закодирован. Если данные кодируются base64, значение кодировки Параметр должен быть "base64". Для всех других значений параметра, в том числе null, предполагается, что данные используют кодировку ASCII для октетов внутри диапазона безопасных URL-адресов и использовать стандартные % xx hex кодировка URL-адресов для октетов вне этого диапазона. Например, '#', '%', '\', '?' следует заменить на% 23,% 25,% 27,% 3f соответственно.

URL-адрес схемы данных, сформированный этим методом, использует US-ASCII по умолчанию кодировок. Если вам нужно установить другую кодировку, вы должны сформировать URL-адрес схемы данных, который явно указывает параметр charset в часть медиатипа URL-адреса и вместо этого вызывает loadUrl (String). Обратите внимание, что кодировка, полученная из медиатипа части данных URL всегда переопределяет значение, указанное в документе HTML или XML сам по себе.

Следующий код работал у меня.

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

Ответ 8

webView.loadDataWithBaseURL(null, html, "text/html", "utf-8", null);