Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 04.09.2007, 15:22   #1
Sashunya
Пользователь
 
Регистрация: 28.08.2007
Сообщений: 11
По умолчанию Сконвертировать Olevariant (Unicode) в string

Короче проблема такая: есть у меня переменная типа Olevariant. Она скорее всего содержит строку в unicode. Мне надо сконвертировать ее в обычную string. Как это сделать? Кусок кода

procedure TfrmMain.Telnet1Receive(Sender: TObject);
var
Data : olevariant;
ba:array of byte;
begin
// If blocking, receive will occur in the function that is blocking
if Telnet1.Timeout > 0 then exit;
// telnet has data ready to receive
// receive the data via a byte array
SetLength(ba,Telnet1.ReceiveBufferC ount);
Data := ba;
Telnet1.Receive(data);
// мне нужно работать именно с Data и анализировать что в этой строке содержится
Vt1.Display(Data); // это просто терминал, который отображает корректно информацию

end;
Sashunya вне форума Ответить с цитированием
Старый 04.09.2007, 15:37   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Ну сделай переменку типа WideString и ей присвой эту data
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 05.09.2007, 10:00   #3
Sashunya
Пользователь
 
Регистрация: 28.08.2007
Сообщений: 11
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Ну сделай переменку типа WideString и ей присвой эту data
Делал, не катит. Имею набор ???????:::::???? знаков.
Sashunya вне форума Ответить с цитированием
Старый 05.09.2007, 10:43   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

В таком случае надо точно узнать что там в data находится.
И еще можеш попробовать функцию VarToWideStr.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 05.09.2007, 11:43   #5
Sashunya
Пользователь
 
Регистрация: 28.08.2007
Сообщений: 11
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
В таком случае надо точно узнать что там в data находится.
И еще можеш попробовать функцию VarToWideStr.
То же самое

с MultiByteToWideChar перепробовал все кодировки не помгло. Похоже не уникод. Hо в доке написано по поводу того что приходит в data

When Data is specified as a String, all bytes are converted to 16-bit
Unicode characters according to the default ANSI code page specified
on the system. If the code page is not ASCII, multi-byte characters
convert to single Unicode characters. This is not as efficient as
receiving into a large Byte array. The most efficient transfer is
possible when a large global Byte array is allocated once, and
all network data is repeatedly read into the same array (a single
memory transfer takes place directly from the system buffers into
the global Byte array allocated in the user's application).

Вообще это компонент для коннкекта с терминалом по протоколам Телнет и
RLOGIN (мне как раз и он и нужен). От компонента надо чтобы в Data пришел
текст обычный формата string. Хотя терминал этой компоненты нормально все
отображает.

Помогите, плиз.
Sashunya вне форума Ответить с цитированием
Старый 05.09.2007, 11:56   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

А просто его в массив char преобразовать? Может что и вылезет?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 07.09.2007, 02:28   #7
Ring0Sn
Форумчанин
 
Аватар для Ring0Sn
 
Регистрация: 06.09.2007
Сообщений: 239
По умолчанию

Если они пишут что их инфа в виде юникода то кодируй в ANSI для начала:
в ntdll.dll есть RtlUnicodeStringToAnsiString, её описания:
function RtlUnicodeStringToAnsiString(
DestinationString: PAnsiString;
SourceString: PUnicodeString;
AllocateDestinationString: boolean
): NTSTATUS; stdcall external 'ntdll.dll';

Последний раз редактировалось Ring0Sn; 07.09.2007 в 02:33.
Ring0Sn вне форума Ответить с цитированием
Старый 07.09.2007, 02:34   #8
Ring0Sn
Форумчанин
 
Аватар для Ring0Sn
 
Регистрация: 06.09.2007
Сообщений: 239
По умолчанию

Структура PUnicodeString:
PUnicodeString = ^TUnicodeString;
TUnicodeString = packed record
Length: Word;
MaximumLength: Word;
Buffer: PWideChar;
end;
Ring0Sn вне форума Ответить с цитированием
Старый 08.09.2007, 00:49   #9
Tokolist
Пользователь
 
Аватар для Tokolist
 
Регистрация: 04.09.2007
Сообщений: 19
По умолчанию

попробуй WideCharToString
Tokolist вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Unicode в indy9 Mixasik Работа с сетью в Delphi 3 25.08.2008 15:44
unicode и printf Legat Общие вопросы C/C++ 9 06.07.2008 13:41
как переделать график в OleVariant ? Влажимир Общие вопросы Delphi 1 14.04.2008 19:18
Разобратся в Unicode компоненты aizon Помощь студентам 9 24.03.2008 11:25
Unicode }{UTPUU Общие вопросы Delphi 4 02.04.2007 15:21