Ответ 1
Только способ работать, как прокомментировал здесь:
webview.loadDataWithBaseURL("fake://not/needed", html, "text/html", "utf-8", "");
Нет кодировки URI, ошибка utf-8... 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>
Только способ работать, как прокомментировал здесь:
webview.loadDataWithBaseURL("fake://not/needed", html, "text/html", "utf-8", "");
Нет кодировки URI, ошибка utf-8... loadData?
myWebView.loadData(myHtmlString, "text/html; charset=UTF-8", null);
Это работает безупречно, особенно на Android 4.0, который, по-видимому, игнорирует кодировку символов внутри.
Протестировано на 2.3 и 4.0.3.
На самом деле, я понятия не имею, какие другие значения, кроме "base64", выполняет последний параметр. В некоторых примерах Google помещается нуль.
Вы всегда должны использовать кодировку UTF-8. Каждое другое кодирование символов устарело уже много лет.
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);
Одно из решений проблемы.
У меня есть дисплей © 2011, и он показывал Â ©.
С приведенным ниже кодом я достиг отображаемого правильного значения © 2011
webViewContent.loadDataWithBaseURL(null, html, "text/html", "utf-8", null);
AFAIK:
Во-первых, метод loadData() используется для загрузки необработанного HTML-кода.
Во-вторых, просто поместите html-код непосредственно в loadData(), не кодируйте его
Возможно, вы захотите попробовать следующее:
webview.loadData(uri, "text/html", "ISO-8859-1");
Ура!
У меня тоже возникла проблема получить странный характер, например, здесь и там. Пробовал разные параметры, но тот, который работал, ниже.
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.
Информация из документов Java о методе loadDatastrong >
Загружает данные в этот 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");
webView.loadDataWithBaseURL(null, html, "text/html", "utf-8", null);