powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / StringList и кодировка. Извечные проблемы
20 сообщений из 20, страница 1 из 1
StringList и кодировка. Извечные проблемы
    #39841204
dartveider13
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Господа прошу помощи))) Осваиваю Indy... Гоняю SOAP-запросы и ответы через IdHTTP и IdTCP. С IdHTTP Все хорошо. Но вот данные по IdTCP я гоняю через StringList, загружая в него данные из MemoryStream, полученный из IdHTTP. Можно ли каким-нибудь образом по дефолту работать с StringList в кодировке UTF-8? Ответы клиенту с кириллицей выводятся в виде ?????. Или есть более элегантный метод?
...
Рейтинг: 0 / 0
StringList и кодировка. Извечные проблемы
    #39841212
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Версия делфей какая? С какой-то версии потоки в конструкторе позволяют указывать кодировку.
...
Рейтинг: 0 / 0
StringList и кодировка. Извечные проблемы
    #39841213
dartveider13
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wadman, да да юникодная XE, забыл указать
...
Рейтинг: 0 / 0
StringList и кодировка. Извечные проблемы
    #39841215
dartveider13
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Для обмена сообщениями между веб-сервисом и клиентом используется самописная виндовая служба в которой есть IdTCP Client & Server. Для обращения к веб-службе IdHTTP Client. TCP Server получает от клиента запросы через StringList и отправляет ответы через него же.
...
Рейтинг: 0 / 0
StringList и кодировка. Извечные проблемы
    #39841217
dartveider13
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Также есть отдельное приложение с TCP Client, которое общается с самописной службой. TCP Client на службе нужен для проброса запроса следующей такой же службе, если выставлен соответствующий режим
...
Рейтинг: 0 / 0
StringList и кодировка. Извечные проблемы
    #39841218
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если обе части самописные, то где-то что-то недокручено.
...
Рейтинг: 0 / 0
StringList и кодировка. Извечные проблемы
    #39841224
dartveider13
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wadman, Я думаю, что это в части службы. В основном я сейчас смотрю на обработчик ошибок. Приведу эту часть:

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
procedure TSOAP_Transfer.IdTCPServerExecute(AContext: TIdContext);
var
 MS: TMemoryStream;
 SL: TStringList;
begin
 MS := TMemoryStream.Create;
 SL := TStringList.Create;
 try
   SL.Text := Acontext.Connection.ReadLN;

   // Дальше идет Case выбора режима. Возьму кусочек где идет обращение к веб-службе
   try
    IdHttp.Post(HTTP_WWW, SL, MS);
    SL.Clear;
    MS.position := 0;
    SL.LoadFromStream(MS);
    Acontext.Connection.Socket.WriteLn(SL.Text);  
   except
     on E:EIdHTTPProtocolException
     begin
     // Вот как раз сейчас инетерсует переброска нормального сообщения об ошибке клиенту. Здесь ???
    SL.Clear;
    SL.Text := E.ErrorMessage // Он в UTF-8
   Acontext.Connection.Socket.WriteLn(SL.Text);
     end;
   end;
 finally
  FreeAndNil(MS);
  FreeAndNil(SL);
 end; 
end;
...
Рейтинг: 0 / 0
StringList и кодировка. Извечные проблемы
    #39841247
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dartveider13Я думаю, что это в части службы.
До службы еще далеко. Достаточно на пустом приложении сэмулировать ситуацию и там-же бороться с проблемой. Это проще, чем службу отлаживать.
...
Рейтинг: 0 / 0
StringList и кодировка. Извечные проблемы
    #39841268
Zelius
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wadman,

можно гонять данные UTF8 в бинарном виде, кодировать/декодировать их с помощью TEncoding.
Передаем
Код: pascal
1.
2.
3.
4.
5.
6.
7.
var
  Buffer: TBytes;
begin
  S := 'Это какой-то текст';
  Buffer := TEncoding.UTF8.GetBytes(S);
  SendBuffer(Buffer);
end;


принимаем
Код: pascal
1.
2.
3.
4.
5.
6.
var
  Buffer: TBytes;
begin
  Buffer := ReceiveBuffer;
  MyStrLst.Text := TEncoding.UTF8.GetString(Buffer);
end;
...
Рейтинг: 0 / 0
StringList и кодировка. Извечные проблемы
    #39841269
dartveider13
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Zelius, SendBuffer & ReceiveBuffer - это методы IdTCP?
...
Рейтинг: 0 / 0
StringList и кодировка. Извечные проблемы
    #39841279
Zelius
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dartveider13,

нет, просто абстрактные процедуры
...
Рейтинг: 0 / 0
StringList и кодировка. Извечные проблемы
    #39841283
Фотография Dmitry Arefiev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Чем THttpClient не устраивает, делающий все на автомате ...
...
Рейтинг: 0 / 0
StringList и кодировка. Извечные проблемы
    #39841284
dartveider13
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Zelius, ну я сейчас пробую readbytes & writebytes
...
Рейтинг: 0 / 0
StringList и кодировка. Извечные проблемы
    #39841289
dartveider13
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dmitry Arefiev, HTTPClient используется для прямого обращения к веб-службе. Но на пути к ее обращению могут стоять другие сервера с другими IP. Вот я и использую TCP для проброса запроса
...
Рейтинг: 0 / 0
StringList и кодировка. Извечные проблемы
    #39841293
dartveider13
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Zelius, с Bytes получаются теперь китайские кракозябры.
...
Рейтинг: 0 / 0
StringList и кодировка. Извечные проблемы
    #39841304
dartveider13
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
О, вроде получилось)))
...
Рейтинг: 0 / 0
StringList и кодировка. Извечные проблемы
    #39841312
Фотография Dmitry Arefiev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dartveider13Но на пути к ее обращению могут стоять другие сервера с другими IP
В смысле, прокси ? THttpClient работает с ними
...
Рейтинг: 0 / 0
StringList и кодировка. Извечные проблемы
    #39841314
Zelius
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dartveider13,

а вообще, Dmitry Arefiev прав, уже все есть, просто надо разобраться
Код: pascal
1.
2.
3.
procedure TIdIOHandler.Write(const AOut: string; AByteEncoding: IIdTextEncoding = nil
  {$IFDEF STRING_IS_ANSI}; ASrcEncoding: IIdTextEncoding = nil{$ENDIF}
  );
...
Рейтинг: 0 / 0
StringList и кодировка. Извечные проблемы
    #39841316
dartveider13
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну что-то типа прокси, да. До веб службы путь лежит через разные сети. Ну у меня пока что с байтами получилось. Время поджимает. Позже покурю в сторону только HTTP. Спасибо.
...
Рейтинг: 0 / 0
StringList и кодировка. Извечные проблемы
    #39841345
Фотография Квейд
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dartveider13Господа прошу помощи))) Осваиваю Indy... Гоняю SOAP-запросы и ответы через IdHTTP и IdTCP. С IdHTTP Все хорошо. Но вот данные по IdTCP я гоняю через StringList, загружая в него данные из MemoryStream, полученный из IdHTTP. Можно ли каким-нибудь образом по дефолту работать с StringList в кодировке UTF-8? Ответы клиенту с кириллицей выводятся в виде ?????. Или есть более элегантный метод?

Код: pascal
1.
TList<UTF8String>



не предлагать?
...
Рейтинг: 0 / 0
20 сообщений из 20, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / StringList и кодировка. Извечные проблемы
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]