Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Сети > Unicode строки в indy 9


Автор: Mixasik 23.8.2008, 12:20
Добрый день. Возникла проблемка или я просто туплю 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

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

Код

var
  MyWStr: WideString;
  MyAStr: String;

передача
Код

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

прием
Код

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


Автор: Matematik 26.9.2008, 09:59
№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;


Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)