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

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

Привет

4b9b3361

Ответ 1

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

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

Ответ 2

Это, кажется, было нарушено в какой-то форме или моде навсегда. Проблема 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

Последние версии 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 все еще не разрешил эту основную проблему.

Ответ 3

бит Derzu очень полезен выше:

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(). Отличное внимание к деталям, Derzu

Ответ 4

Существует два способа, которыми 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");. Он должен отображать нелатинские символы, как вы ожидаете.

Ответ 5

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

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

Ответ 6

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

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

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

Ответ 7

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

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

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

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

Ответ 8

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

  • Использование loadDataWithBaseUrl вместо функции loadData.
  • Настройка правильной кодировки в html файле как метатег
  • Установка defaultTextEncodingName в WebSettings

Примеры были предоставлены с помощью других ответов, поэтому я не повторяю!

Ответ 9

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