Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Delphi [игнор отключен] [закрыт для гостей] / StringList и кодировка. Извечные проблемы / 20 сообщений из 20, страница 1 из 1
25.07.2019, 08:52
    #39841204
dartveider13
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
StringList и кодировка. Извечные проблемы
Господа прошу помощи))) Осваиваю Indy... Гоняю SOAP-запросы и ответы через IdHTTP и IdTCP. С IdHTTP Все хорошо. Но вот данные по IdTCP я гоняю через StringList, загружая в него данные из MemoryStream, полученный из IdHTTP. Можно ли каким-нибудь образом по дефолту работать с StringList в кодировке UTF-8? Ответы клиенту с кириллицей выводятся в виде ?????. Или есть более элегантный метод?
...
Рейтинг: 0 / 0
25.07.2019, 09:00
    #39841212
wadman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
StringList и кодировка. Извечные проблемы
Версия делфей какая? С какой-то версии потоки в конструкторе позволяют указывать кодировку.
...
Рейтинг: 0 / 0
25.07.2019, 09:03
    #39841213
dartveider13
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
StringList и кодировка. Извечные проблемы
wadman, да да юникодная XE, забыл указать
...
Рейтинг: 0 / 0
25.07.2019, 09:08
    #39841215
dartveider13
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
StringList и кодировка. Извечные проблемы
Для обмена сообщениями между веб-сервисом и клиентом используется самописная виндовая служба в которой есть IdTCP Client & Server. Для обращения к веб-службе IdHTTP Client. TCP Server получает от клиента запросы через StringList и отправляет ответы через него же.
...
Рейтинг: 0 / 0
25.07.2019, 09:10
    #39841217
dartveider13
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
StringList и кодировка. Извечные проблемы
Также есть отдельное приложение с TCP Client, которое общается с самописной службой. TCP Client на службе нужен для проброса запроса следующей такой же службе, если выставлен соответствующий режим
...
Рейтинг: 0 / 0
25.07.2019, 09:14
    #39841218
wadman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
StringList и кодировка. Извечные проблемы
Если обе части самописные, то где-то что-то недокручено.
...
Рейтинг: 0 / 0
25.07.2019, 09:25
    #39841224
dartveider13
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
StringList и кодировка. Извечные проблемы
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
25.07.2019, 10:26
    #39841247
wadman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
StringList и кодировка. Извечные проблемы
dartveider13Я думаю, что это в части службы.
До службы еще далеко. Достаточно на пустом приложении сэмулировать ситуацию и там-же бороться с проблемой. Это проще, чем службу отлаживать.
...
Рейтинг: 0 / 0
25.07.2019, 10:58
    #39841268
Zelius
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
StringList и кодировка. Извечные проблемы
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
25.07.2019, 11:01
    #39841269
dartveider13
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
StringList и кодировка. Извечные проблемы
Zelius, SendBuffer & ReceiveBuffer - это методы IdTCP?
...
Рейтинг: 0 / 0
25.07.2019, 11:15
    #39841279
Zelius
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
StringList и кодировка. Извечные проблемы
dartveider13,

нет, просто абстрактные процедуры
...
Рейтинг: 0 / 0
25.07.2019, 11:20
    #39841283
Dmitry Arefiev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
StringList и кодировка. Извечные проблемы
Чем THttpClient не устраивает, делающий все на автомате ...
...
Рейтинг: 0 / 0
25.07.2019, 11:20
    #39841284
dartveider13
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
StringList и кодировка. Извечные проблемы
Zelius, ну я сейчас пробую readbytes & writebytes
...
Рейтинг: 0 / 0
25.07.2019, 11:27
    #39841289
dartveider13
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
StringList и кодировка. Извечные проблемы
Dmitry Arefiev, HTTPClient используется для прямого обращения к веб-службе. Но на пути к ее обращению могут стоять другие сервера с другими IP. Вот я и использую TCP для проброса запроса
...
Рейтинг: 0 / 0
25.07.2019, 11:33
    #39841293
dartveider13
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
StringList и кодировка. Извечные проблемы
Zelius, с Bytes получаются теперь китайские кракозябры.
...
Рейтинг: 0 / 0
25.07.2019, 11:41
    #39841304
dartveider13
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
StringList и кодировка. Извечные проблемы
О, вроде получилось)))
...
Рейтинг: 0 / 0
25.07.2019, 11:48
    #39841312
Dmitry Arefiev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
StringList и кодировка. Извечные проблемы
dartveider13Но на пути к ее обращению могут стоять другие сервера с другими IP
В смысле, прокси ? THttpClient работает с ними
...
Рейтинг: 0 / 0
25.07.2019, 11:51
    #39841314
Zelius
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
StringList и кодировка. Извечные проблемы
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
25.07.2019, 11:56
    #39841316
dartveider13
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
StringList и кодировка. Извечные проблемы
Ну что-то типа прокси, да. До веб службы путь лежит через разные сети. Ну у меня пока что с байтами получилось. Время поджимает. Позже покурю в сторону только HTTP. Спасибо.
...
Рейтинг: 0 / 0
25.07.2019, 12:55
    #39841345
Квейд
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
StringList и кодировка. Извечные проблемы
dartveider13Господа прошу помощи))) Осваиваю Indy... Гоняю SOAP-запросы и ответы через IdHTTP и IdTCP. С IdHTTP Все хорошо. Но вот данные по IdTCP я гоняю через StringList, загружая в него данные из MemoryStream, полученный из IdHTTP. Можно ли каким-нибудь образом по дефолту работать с StringList в кодировке UTF-8? Ответы клиенту с кириллицей выводятся в виде ?????. Или есть более элегантный метод?

Код: pascal
1.
TList<UTF8String>



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


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