Чтение HTML-данных из буфера обмена
От: HungryEars  
Дата: 23.06.04 12:36
Оценка:
Читаю из буфера HTML-данные — весь русскоязычный текст превращается в абракадабру. Код примерно такой:

const
  CF_HTML = 49285;
var 
  Data: string;
  hClipboard: Cardinal;
...

Clipboard.Open;
if Clipboard.HasFormat(CF_HTML) then
begin
  hClipboard := Clipboard.GetAsHandle(CF_HTML);
  Data := PChar(GlobalLock(hClipboard));
  GlobalUnlock(hClipboard);
  MessageBox(0, PChar(Data), 'Clipboard Data', MB_APPLMODAL + MB_OK);
end;
Clipboard.Close;

При чтении содержимого буфера в формате CF_TEXT все нормально.
Напишите, плиз, если кто в курсе.
Re: Чтение HTML-данных из буфера обмена
От: Dimonka Верблюд  
Дата: 23.06.04 12:49
Оценка:
Здравствуйте, HungryEars, Вы писали:

HE>Читаю из буфера HTML-данные — весь русскоязычный текст превращается в абракадабру. Код примерно такой:


HE>
HE>const
HE>  CF_HTML = 49285;
HE>var 
HE>  Data: string;
HE>  hClipboard: Cardinal;
HE>...

HE>Clipboard.Open;
HE>if Clipboard.HasFormat(CF_HTML) then
HE>begin
HE>  hClipboard := Clipboard.GetAsHandle(CF_HTML);
HE>  Data := PChar(GlobalLock(hClipboard));
HE>  GlobalUnlock(hClipboard);
HE>  MessageBox(0, PChar(Data), 'Clipboard Data', MB_APPLMODAL + MB_OK);
HE>end;
HE>Clipboard.Close;
HE>

HE>При чтении содержимого буфера в формате CF_TEXT все нормально.
HE>Напишите, плиз, если кто в курсе.

Дело в том, что текст кодирован в UTF-8
Re[2]: Чтение HTML-данных из буфера обмена
От: HungryEars  
Дата: 23.06.04 13:00
Оценка:
Здравствуйте, Dimonka, Вы писали:

D>Дело в том, что текст кодирован в UTF-8



Огромное спасибо. Использовал Utf8ToAnsi — все стало путем.
Мне даже в голову не приходило попробовать такой вариант (откуда там UTF8, если исходная страница в Windows-1251?)
Re[3]: Чтение HTML-данных из буфера обмена
От: Dimonka Верблюд  
Дата: 23.06.04 13:21
Оценка:
Здравствуйте, HungryEars, Вы писали:

HE>Здравствуйте, Dimonka, Вы писали:


D>>Дело в том, что текст кодирован в UTF-8



HE>Огромное спасибо. Использовал Utf8ToAnsi — все стало путем.

HE>Мне даже в голову не приходило попробовать такой вариант (откуда там UTF8, если исходная страница в Windows-1251?)

В какой кодировке бы там ни была страница — это формат передачи хтмл данных через буфер обмена.
Re[4]: Чтение HTML-данных из буфера обмена
От: MoG Россия  
Дата: 13.12.06 13:32
Оценка:
HE>>Огромное спасибо. Использовал Utf8ToAnsi — все стало путем.
HE>>Мне даже в голову не приходило попробовать такой вариант (откуда там UTF8, если исходная страница в Windows-1251?)

D>В какой кодировке бы там ни была страница — это формат передачи хтмл данных через буфер обмена.


если перекодировать строку текста в UTF-8 перед закидыванием в буфер, то это поможет избежать использования Utf8ToAnsi при извлечении ее оттуда?

Дело в том, что в моем ведении находится лишь занесение данных в буфер, а забирает их оттуда Word... путем вызова PasteSpecial... т.е. контролировать процесс извлечения данных я не могу...
Re[5]: Чтение HTML-данных из буфера обмена
От: Arioch  
Дата: 13.12.06 15:03
Оценка:
MoG>Дело в том, что в моем ведении находится лишь занесение данных в буфер, а забирает их оттуда Word... путем вызова PasteSpecial... т.е. контролировать процесс извлечения данных я не могу...

А что, не работает что-то ? если не работает, то так и пишите, что не работает. www.webhelp.ru

Пока вы написали, что у вас не работает вставка в вашу программу, а не копирование из программы и вставка в ворд.

PS: посмотрите списое форматов для вставки текста. Во-первых есть юникодный текстк, во вторых есть charset для указания в какой кодировке ты вставляешь CF_TEXT.Если ты забыл указать кодировку — берется текущая раскладка клавиатуры.
Re[6]: Чтение HTML-данных из буфера обмена
От: MoG Россия  
Дата: 13.12.06 15:25
Оценка:
Здравствуйте, Arioch, Вы писали:

A>Пока вы написали, что у вас не работает вставка в вашу программу, а не копирование из программы и вставка в ворд.

Вставка в моб программу вообще не нужна... Необходимо реализовать копирование из моей программы в буфер и вставку в ворд... Так вот, в ворд данные вставляются с искаженными русскими буквами...

A>PS: посмотрите списое форматов для вставки текста. Во-первых есть юникодный текстк, во вторых есть charset для указания в какой кодировке ты вставляешь CF_TEXT.Если ты забыл указать кодировку — берется текущая раскладка клавиатуры.

я вставляю не в формате CF_TEXT, а в формате html... если данные заносятся в буфер в формате html, то они автоматически преобразубтся в UTF-8... так вот: если бы я сам забирал эти данные из буфера, то можно было бы вызвать Utf8ToAnsi и все было бы замечательно, НО... но забирание данных их буфера производится Вордовской функцией PasteSpecial, и при этом ей никак не укажешь какую кодировку нужно получить на выходе... потому данные в Ворд попадают искажеными...

вот она проблема!..
Re[7]: Чтение HTML-данных из буфера обмена
От: Arioch  
Дата: 13.12.06 16:13
Оценка:
A>>PS: посмотрите списое форматов для вставки текста. Во-первых есть юникодный текстк, во вторых есть charset для указания в какой кодировке ты вставляешь CF_TEXT.Если ты забыл указать кодировку — берется текущая раскладка клавиатуры.
MoG>я вставляю не в формате CF_TEXT, а в формате html... если данные заносятся в буфер в формате html, то они автоматически преобразубтся в UTF-8... так вот: если бы я сам забирал эти данные из буфера, то можно было бы вызвать Utf8ToAnsi и все было бы замечательно, НО... но забирание данных их буфера производится Вордовской функцией PasteSpecial, и при этом ей никак не укажешь какую кодировку нужно получить на выходе... потому данные в Ворд попадают искажеными...

1. Попробуй таки указать charset, м.б. он работает не только на CF_TEXT

2. Поищи юникодный HTML аналогично юникодному тексту.
2.1. попробуй использовать юникодные функции для вставки HTML-ля, а сам HTML — кодировать в UTF-16 (WideString, PWideChar)

3. Он только кодировку неправильно указывает или и теги не разбюирает? если тоьлко кодировку — русские буквы можно заменять на юникодные "&#xxxx;"

4. возьми программку для просмотра всех форматов в буфере (я моджифицировал демку из RxLib) и сравнивай правильный и не правильный буфер по наличию форматов и щначению, опять все тот же charset
Ведь Word сам в себя вставляет? Или например из MS IE вставляет? Или например из NVu ?
Значит как-то они что-то по другому указывают.

5. На худой случай м.б. через COM отработать ?
См. на Delphi Kingdom статьи про интеграции delhpi + excel, с word'ом так же
Re[8]: Чтение HTML-данных из буфера обмена
От: MoG Россия  
Дата: 14.12.06 07:30
Оценка:
Здравствуйте, Arioch, Вы писали:

A>1. Попробуй таки указать charset, м.б. он работает не только на CF_TEXT

Где указывать charset? Ни одна из используемых функций такого параметра не имеет...

A>2.1. попробуй ... HTML — кодировать в UTF-16 (WideString, PWideChar)

Не помогает... Во что только не пробовал кодировать...

A>3. Он только кодировку неправильно указывает или и теги не разбюирает? если тоьлко кодировку — русские буквы можно заменять на юникодные "&#xxxx;"

Только кодировку... Если html на латинице, то все работает превосходно...
Насчет замены русских букв — это дельный вариант! Надо попробовать...
Re[9]: Чтение HTML-данных из буфера обмена
От: Arioch  
Дата: 14.12.06 13:34
Оценка:
A>>1. Попробуй таки указать charset, м.б. он работает не только на CF_TEXT
MoG>Где указывать charset? Ни одна из используемых функций такого параметра не имеет...

A>>>> посмотрите списое форматов для вставки текста. Во-первых есть юникодный текстк, во вторых есть charset для указания в какой кодировке ты вставляешь CF_TEXT



A>>2.1. попробуй ... HTML — кодировать в UTF-16 (WideString, PWideChar)

MoG>Не помогает... Во что только не пробовал кодировать...
А какими функциями при этом вставляли, юникодными ?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.