|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
04.09.2007, 15:22 | #1 |
Пользователь
Регистрация: 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; |
04.09.2007, 15:37 | #2 |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
Ну сделай переменку типа WideString и ей присвой эту data
I'm learning to live...
|
05.09.2007, 10:00 | #3 |
Пользователь
Регистрация: 28.08.2007
Сообщений: 11
|
|
05.09.2007, 10:43 | #4 |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
В таком случае надо точно узнать что там в data находится.
И еще можеш попробовать функцию VarToWideStr.
I'm learning to live...
|
05.09.2007, 11:43 | #5 | |
Пользователь
Регистрация: 28.08.2007
Сообщений: 11
|
Цитата:
с 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. Хотя терминал этой компоненты нормально все отображает. Помогите, плиз. |
|
05.09.2007, 11:56 | #6 |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
А просто его в массив char преобразовать? Может что и вылезет?
I'm learning to live...
|
07.09.2007, 02:28 | #7 |
Форумчанин
Регистрация: 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. |
07.09.2007, 02:34 | #8 |
Форумчанин
Регистрация: 06.09.2007
Сообщений: 239
|
Структура PUnicodeString:
PUnicodeString = ^TUnicodeString; TUnicodeString = packed record Length: Word; MaximumLength: Word; Buffer: PWideChar; end; |
08.09.2007, 00:49 | #9 |
Пользователь
Регистрация: 04.09.2007
Сообщений: 19
|
попробуй WideCharToString
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
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 |