Android WebView с искаженными символами UTF-8.


Я использую некоторые веб-просмотры в своем приложении для android, но не могу заставить их отображаться в кодировке utf-8.

Если использовать этот, я не увижу моих скандинавских символов:

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

и если попробовать этот, я не получу ничего отображается вообще

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

в отношении

9 71

9 ответов:

вы можете попробовать изменить настройки вашего webview перед загрузкой данных:

WebSettings settings = mWebView.getSettings();
settings.setDefaultTextEncodingName("utf-8");

кроме того, как указано в комментарии ниже, не забудьте добавить "charset=utf-8" к вызову loadData:

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

это, кажется, было сломано в какой-то форме или моде НАВСЕГДА. проблема 1733

используйте loadDataWithBaseURL вместо 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);

теперь часть, которая действительно раздражает, заключается в том, что на Samsung Galaxy S II (4.0.3) loadData() работает просто отлично, но тестирование на Galaxy Nexus (4.0.2) многобайтовые символы искажаются, если вы не используете loadDataWithBaseURL(). WebView Documentation

последние версии Android

некоторые сообщают об изменении поведения вызовов loadData, требующих mimeType включить charset=utf-8.

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

вы также можете использовать эту формулировку с 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);

удивительно, что Android до сих пор не решил эту основную проблему.

бит Дерзу очень полезен выше:

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

у меня был utf-8 на Adroid 2.x и искаженный ansi на 4.x, пока я не положил в

 charset=utf-8

в wv.loadUrlWhatever () вызов. Отличное внимание к деталям, Дерзу

существует два способа, которыми HTML-страница, доставляемая сервером HTTP, может указывать кодировку содержимого. Обычно сервер указывает кодировку содержимого в заголовках HTTP, но поскольку эта страница загружается из файла, нет транзакции HTTP и, следовательно, нет заголовков. В результате WebView принимает кодировку по умолчанию Latin-1.

тем не менее, вы можете указать кодировку содержимого с помощью <meta> тег. Создайте свой html-файл таким образом:

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

и затем загрузить его в WebView с помощью mWebView.loadUrl("file:///android_asset/om.html");. Он должен отображать нелатинские символы, как вы ожидаете.

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

сочетание двух, кажется, работает для меня. По какой-то причине ему нравится null в кодировке и кодировке в типе mime :/ странный. это решило месяцы обострения для меня.

вам нужно поменять местами первые два аргумента. Смотрите эту тему: Android WebView UTF-8 не показывает

Так что ваш код должен выглядеть так:

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

Я не уверен, что вы делаете перед загрузкой этой страницы. Может ли это изменение безопасности иметь какое-то отношение к этому? Вы загружаете страницу из интернета раньше?

Примечание для сообщения 1.0. Из-за изменения в WebKit доступ к файлам активов через "file:///android_asset/" для субресурсов более ограничен. Если вы предоставите null или пустую строку в качестве baseUrl, вы не сможете получить доступ к файлам активов. Если baseUrl-это что-то другое, кроме http(s)/ftp (s)/about/javascript как схема, вы можете получить доступ к файлам активов для вложенных ресурсов.

Взято отсюда:http://developer.android.com/reference/android/webkit/WebView.html В разделе по методу "loadDataWithBaseURL".

можете ли вы использовать" loadData " вместо быстрого теста? Укажите "utf-8" для кодирования и вставки скандинавского символа в парметр данных. Простой тест для устранения проблемы безопасности.

вы должны иметь в виду 3 вещи, чтобы показать правильный контент всегда:

  1. использование loadDataWithBaseUrl вместо функции loadData.
  2. установка правильной кодировки в html-файле в качестве мета-тега
  3. установка defaultTextEncodingName в WebSettings

примеры были предоставлены через другие ответы, чтобы не повторяться!

mwebView.loadData(URLEncoder.encode(data, "utf-8").replaceAll("\+"," "), "text/html", "utf-8");