Модераторы: Snowy, Poseidon, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Unicode строки в indy 9, использование WideString 
:(
    Опции темы
Mixasik
Дата 23.8.2008, 12:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Little Delphi monstr
*


Профиль
Группа: Участник
Сообщений: 195
Регистрация: 4.10.2006
Где: Волгоград

Репутация: нет
Всего: нет



Добрый день. Возникла проблемка или я просто туплю smile Пишу протокол:
Принцип работы :
1) посылается команда о следующих действиях клиента и сервер ждет от клиента уже конкретные данные, но я использую unicode (WideString) могу ли я передать эту строку методом Write()? Как я понял нет(
2) Я решил делать так, вначале передавать, например, размер этой строки в байтах, а потом
WriteBuffer(WString,sizeOF(WString)) и сервер будет знать размер и считывать так:
Athread.Connection.ReadBuffer(serverWSTR, ReceivedSize), где второй параметр размер передаваемого буфера?
как мне показалось так можно сделать, но может есть метод проще...
И если мне надо передать например запись, с полями где есть тип WideString мне кажется тут будет много проблем ведь нельзя указать WideString[10] и при передаче размера записи, не будет известен размер каждого поля типа WideString.... Второй вариант использовать массив array[0..1024] of WChar;
В общем жду идей и советов  smile  smile

Это сообщение отредактировал(а) Mixasik - 23.8.2008, 12:22
PM MAIL ICQ   Вверх
yus
Дата 26.9.2008, 05:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 27
Регистрация: 1.2.2007
Где: Tomsk

Репутация: нет
Всего: нет



А если попробовать WideString конвертнуть в UTF8  затем передать полученную строку методом Write(), на том конце получить и конвертнуть обратно в WideString.

Код

var
  MyWStr: WideString;
  MyAStr: String;

передача
Код

  MyAStr := UTF8Encode(MyWStr);
  ...Write(MyAStr);

прием
Код

  ...Read(MyAStr);
  MyWStr := UTF8Decode(MyAStr);



Это сообщение отредактировал(а) yus - 26.9.2008, 05:53
PM MAIL ICQ Jabber   Вверх
Matematik
Дата 26.9.2008, 09:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1027
Регистрация: 11.3.2006

Репутация: 24
Всего: 50



№2
вынести код в отдельную функции записи\чтения
Код

procedure Read_(conn:TIdTCPConnection; var WStr:WideString);
var Size:Integer;
begin
  size := conn.ReadInteger;
  SetLength(WStr, Size div SIZEOF(WideChar));
  conn.ReadBuffer(Pointer(WStr)^, Size);
end;
procedure Send_(conn:TIdTCPConnection; const WStr:WideString);
var Size:Integer;
begin
  Size := Length(WStr)*SizeOf(WideChar);
  conn.WriteInteger(Size);
  conn.WriteBuffer(Pointer(WStr)^, Size);
end;



Это сообщение отредактировал(а) Matematik - 26.9.2008, 10:00
PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Сети"
Snowy
Poseidon
MetalFan

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делится вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Snowy, Poseidon, MetalFan.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Сети | Следующая тема »


 




[ Время генерации скрипта: 0.0816 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.