Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как побороть Unicode ?


avkiev ©   (2003-08-08 13:56:00) 

Есть у меня переменная V типа вариант, в которой сидит юникод-строка. Нужно ее оттуда вытащить. Делаю так:

var v: Variant;
ws: WideString;
...
ws := v;

После этого вижу в переменной WS одни знаки вопроса и всякие непечатные символы.
Как правильно скопировать из переменной типа вариант, содержащей юникод, в WideString ?
Заранее благодарен


avkiev   (2003-08-08 17:39:00) [1]

Мастера Дельфи !
Большое вам человеческое спасибо ! Все получилось !


jack128   (2003-08-08 16:45:00) [2]


> avkiev (08.08.03 16:34)

не совсем так.. вот пример для строки

procedure TForm1.Button1Click(Sender: TObject);
var
v : variant;
s : string;
begin
v := "test string";
s :=string(TVarData(v).vString);
showmessage(s);
end;
точно не знаю как там хранятся твои utf-8 строки, но наверно аналогично. Соответсвенно

n := UTF8ToUnicode(pw, Pointer(TvarData(v).vString), 10);





avkiev   (2003-08-08 16:34:00) [3]

Что-то не получается. Пишу так:

var pw: pWideChar;
v: Variant;
...
( pw, @(v)

Что-то не получается. Пишу так:

var pw: pWideChar;
v: Variant;
...
n := UTF8ToUnicode(pw, @(v), 10);

Вычитывает какой-то бред ...


Игорь Шевченко   (2003-08-08 16:24:00) [4]

Ну структура варианта-то известна...


avkiev   (2003-08-08 16:14:00) [5]

Разобрался я.
На самом деле в варианте сидит не юникод, а UTF-8. Как его преобразовать в юникод ?
Можно было бы использовать функцию UTF8ToUnicode, но она перекодирует строку. А как перекодировать вариант ?


Игорь Шевченко   (2003-08-08 16:04:00) [6]

Не помешают - это точно


avkiev   (2003-08-08 15:38:00) [7]

Честно говоря - не знаю. В About пишет: "Version 6.0 Build 6.163". Думаешь, паки помогут ?


Игорь Шевченко   (2003-08-08 15:24:00) [8]

На D6 оба updatepack установлено ? У них, AFAIK, была проблема с вариантами.


avkiev   (2003-08-08 14:43:00) [9]

> Убедиться, что VarType(v) = varOleStr для начала
Да, это так

> ws := WideString(v);
Увы, не помогло

Спасибо ответившим. Другие мысли есть ?


Игорь Шевченко   (2003-08-08 14:06:00) [10]

Убедиться, что VarType(v) = varOleStr для начала


Onyx   (2003-08-08 14:06:00) [11]

Не знаю я с вариантами не общался, но попробуй так:
ws := WideString(v);
Приведение типов меня часто выручало, хотя с вариантами не уверен. А если быть точным, то вообще не знаю можно ли так делать. Если б Delphi была под рукой, то возможно я бы этого и не написал.


Наверх

Титульная страница Поиск, карта сайта Написать письмо