Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.97.9.171] |
|
Сообщ.
#1
,
|
|
|
Фигня какая-то. Простейшее приложение под андроид, состоит из одного WebView:
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-ку, но у меня все равно не получается. |
Сообщ.
#2
,
|
|
|
Сообщ.
#3
,
|
|
|
Ну это уже какие-то хаки. У меня же не XML, чтобы туда такие заголовки писать. Вызов loadDataWithBaseURL без урленкодинга, кстати, показывает русские буквы нормально.
Я разобраться хочу. |
Сообщ.
#4
,
|
|
|
Почему не xml? Xml как раз таки это подмножество HTML, так что это вполне законный заголовок и парсер вправе "не понять" текст, если не указана кодировка в заголовке
|
Сообщ.
#5
,
|
|
|
HTML - не XML. XML ни в коем случае не является подмножеством HTML.
На данный момент, я выяснил следующее: аргумент encoding это не кодировка текста. Единственное осмысленное значение, которое туда можно передать это "base64". И второе: loadData не предназначен для загрузки данных в кодировках, отличных от "US-ASCII", об этом явно сказано в документации, и как я этого сразу не заметил, не пойму Так что я теперь колдую с loadUrl. Добавлено Ах, да, по идее, с тем же успехом вместо XML-заголовка можно указать META-тег с указанием кодировки. Но это опять недокументированное колдовство: сегодня работает, завтра - нет. |
Сообщ.
#6
,
|
|
|
Цитата HTML - не XML. XML ни в коем случае не является подмножеством HTML. Да, действительно, потому что HTML и XML произошли от SGML. Но в чем проблема использовать приведенный способ? Я так понимаю, WebView подчиняется неким общепринятым правилам отображения HTML, в том числе распознает кодировку по заголовку страницы. |