![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как побороть 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 была под рукой, то возможно я бы этого и не написал.