Скачайте и сохраните любую веб-страницу как Unicode, используя Delphi 2009? - PullRequest
2 голосов
/ 08 февраля 2009

Я хочу скачать веб-страницу, которая может быть в любой возможной кодировке текста, и сохранить ее как UTF16LE. Предполагая, что я могу определить кодировку текста (проверяя заголовок HTTP, заголовок HTML и / или спецификацию), как мне преобразовать текст?

Я использую Delphi 2009. К сожалению, файлы справки не объясняют, как получить из любой кодировки в строку Unicode (UTF16LE). Конкретные вопросы:

  • Могу ли я завершить преобразование, просто установив правильную кодировку для AnsiString и присвоив ее UnicodeString?
  • Если это так, как я могу перевести различные описания "кодировки", которые могут маркировать веб-страницу (Big5, Shift-JIS, UTF-32 и т. Д.), В правильный формат для инициализации AnsiString?

Спасибо за ваши предложения.

Я предпочитаю прямые Win32 и VCL, но ответы с элементами управления ActiveX также могут быть полезны.

Ответы [ 2 ]

2 голосов
/ 08 июля 2010

В D2009 и более поздних версиях компонент TIdHTTP в Indy 10 автоматически декодирует полученную веб-страницу в UTF-16.

Выполнение преобразования кодировки в Unicode в Windows требует использования кодовых страниц (если только вы не используете библиотеку ICONV), поэтому сначала нужно преобразовать имя кодировки в подходящую кодовую страницу, а затем использовать TEncoding.GetEncoding ( ) и TEncoding.GetString () или вызов SetCodePage () для RawByteString (не AnsiString), который вы затем назначаете для UnicodeString, чтобы выполнить преобразование (внутренне Indy использует TEncoding и имеет свои собственные таблицы поиска кодировки в кодовую страницу ).

2 голосов
/ 09 февраля 2009

как вы собираетесь получить доступ к странице? Встроенный Internet Explorer, INDY, сторонний инструмент, ...? Это может повлиять на ответ, поскольку определяет формат входной строки.

Часть 1. Получение страницы

Если вы используете встроенный Internet Explorer (TWebBrowser) для доступа к странице, все довольно просто:

var htmlElement:IHTMLElement;
    myText:String;
begin
  // Get access to the HTML element of the document:
  htmlElement:=(WebBrowserControl.DefaultInterface.Document as IHTMLDocument3).documentElement;
  // Receive the full HTML of the web page:
  myText:=htmlElement.OuterHTML;

Кодирование веб-страницы должно корректно обрабатываться IE и Delphi, и в итоге вы получите UnicodeString, содержащий результат (myText в примерах).

Часть 2. Сохранение в UTF-16LE

Независимо от того, откуда взялась ваша строка - вы можете сохранить ее в следующей кодировке:

var s:TStringStream;
begin
  s:=TStringStream.Create(myText, TEncoding.Unicode, false);
  s.SaveToFile('yourFileToSaveTo.txt');
  FreeAndNil(s);
end;

TEncoding.Unicode - это UTF-16LE, но вы также можете использовать любую другую кодировку.

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...