На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
Модераторы: Hsilgos
  
> WebView и кодировки
    Фигня какая-то. Простейшее приложение под андроид, состоит из одного WebView:

    ExpandedWrap disabled
      package com.n0rd.HelloWorld;
       
      import java.io.IOException;
      import java.net.URL;
       
      import android.app.Activity;
      import android.os.Bundle;
      import android.webkit.WebView;
       
      public class HelloWorldActivity extends Activity
      {
          /** Called when the activity is first created. */
          @Override
          public void onCreate(Bundle savedInstanceState)
          {
              super.onCreate(savedInstanceState);
              //setContentView(R.layout.main);
              WebView wv = new WebView(this);
              setContentView(wv);
              wv.loadData("<html><body><p>пыщь-пыщь, русские буквы</p></body></html>", "text/html", null);
          }
      }

    И на экране кракозябли. Почему?
    Точнее даже не так. Какого хрена, передавая данные как String мне надо указывать кодировку (третий аргумент loadData)? Какую кодировку я должен там указать? В Java в String текст не может храниться в произвольной кодировке, а только в какой-то конкретной (UTF-16?), которую String абстрагирует от программиста. Если бы туда массив байтов передавался, я бы понял. Опять же я туда вместо null пробовал писать UTF-16, и UTF-8. И все равно кракозябли, причем все время одинаковые, что меня наводит на мысль, что ему пофиг, что туда передается. Как правильно?

    Добавлено
    Судя вот по этому: http://code.google.com/p/android/issues/detail?id=3552 надо урлэнкодить HTML-ку, но у меня все равно не получается.
        Ну это уже какие-то хаки. У меня же не XML, чтобы туда такие заголовки писать. Вызов loadDataWithBaseURL без урленкодинга, кстати, показывает русские буквы нормально.
        Я разобраться хочу.
          Почему не xml? Xml как раз таки это подмножество HTML, так что это вполне законный заголовок и парсер вправе "не понять" текст, если не указана кодировка в заголовке
            HTML - не XML. XML ни в коем случае не является подмножеством HTML.

            На данный момент, я выяснил следующее: аргумент encoding это не кодировка текста. Единственное осмысленное значение, которое туда можно передать это "base64". И второе: loadData не предназначен для загрузки данных в кодировках, отличных от "US-ASCII", об этом явно сказано в документации, и как я этого сразу не заметил, не пойму :)

            Так что я теперь колдую с loadUrl.

            Добавлено
            Ах, да, по идее, с тем же успехом вместо XML-заголовка можно указать META-тег с указанием кодировки. Но это опять недокументированное колдовство: сегодня работает, завтра - нет.
              Цитата
              HTML - не XML. XML ни в коем случае не является подмножеством HTML.

              Да, действительно, потому что HTML и XML произошли от SGML.
              Но в чем проблема использовать приведенный способ? Я так понимаю, WebView подчиняется неким общепринятым правилам отображения HTML, в том числе распознает кодировку по заголовку страницы.
              1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
              0 пользователей:


              Рейтинг@Mail.ru
              [ Script execution time: 0,0579 ]   [ 14 queries used ]   [ Generated: 1.09.24, 02:08 GMT ]