Здравствуйте, ev.ga, Вы писали:
EG>можно ли в htmlayout получить/изменить значение charset мета-тега без навигации по dom?
А какой результат этого мероприятия ожидается?
Внутреннее представление текста в DOM — UTF-16 (т.е. LPWCSTR).
И charset работает только на этапе parsing. После того как DOM построен — charset уже не используется. Ни на вход ни на выход (который всегда UTF-8).
Здравствуйте, ev.ga, Вы писали:
EG>Здравствуйте, c-smile, Вы писали:
CS>>А какой результат этого мероприятия ожидается?
EG>мне нужно сделать возможность выбора кодировки для отображения страницы
На загрузку в Htmlayout отдается всегда UTF-16. Будь то путь к файлу или содержимое строкового буфера по указателю (LPWCSTR). Т.е. вам нужно самому предварительно что-то предпринимать, если файл или буфер с содержимым не соответствуют формату UTF-16. В случае с файлом скорее всего нужно предварительно самому анализировать его кодировку (через meta-тег, прописанный в файле или непосредственно анализом содержимого), конвертировать через промежуточный буфер в UTF-16 и уже потом "отдавать" все это в Htmlayout.
Здравствуйте, Nikolaz, Вы писали:
N>Здравствуйте, ev.ga, Вы писали:
EG>>Здравствуйте, c-smile, Вы писали:
CS>>>А какой результат этого мероприятия ожидается?
EG>>мне нужно сделать возможность выбора кодировки для отображения страницы
N>На загрузку в Htmlayout отдается всегда UTF-16.
Чтобы я еще понял что это означает...
HTMLayoutLoadHtml принимает на вход LPCBYTE.
Это может быть и UTF-16 но лучше что бы было UTF-8 c BOM в начале. В этом сдучае парсинг и определение кодировки самые быстрые.
В случае с UTF-16 я сначала перевожу весь текст в UTF-8 и запускаю парсер в этом виде.
Если я вижу что кодировка не UTF-16, т.е. использует single byte code unit, то парсится как и utf-8. Если встречается meta/charset то он переключяет encoder входного потока.
Т.е. UTF-16 для html на самом деле самая неудачная кодировка и для HTML и для XML — markup то весь есть ASCII последовательности.
N>На загрузку в Htmlayout отдается всегда UTF-16. Будь то путь к файлу или содержимое строкового буфера по указателю (LPWCSTR). Т.е. вам нужно самому предварительно что-то предпринимать, если файл или буфер с содержимым не соответствуют формату UTF-16. В случае с файлом скорее всего нужно предварительно самому анализировать его кодировку (через meta-тег, прописанный в файле или непосредственно анализом содержимого), конвертировать через промежуточный буфер в UTF-16 и уже потом "отдавать" все это в Htmlayout.
charset находится простым strstr. Меняем значение, склеиваем строку и отдаем мне в таком виде. Но только не UTF-16 в таком случае.