Написал простой REST сервер который работает через Indy компоненты. И выдает данные из MS SQL сервера
Проблема с кодировкой.
Ответ Response выдается в кодировке CP1251 чего бы я не делал
- Код: Выделить всё
- var rResponce: widestring;
 thr_Query: TSQLQuery; <<<---- помещается запрос и выполняется Open, возвращается 1 запись с кодом и строкой XML
 ....
 AResponseInfo.ContentType:='text/xml;charset='+Response_charset+';'
 AResponseInfo.ResponseNo := thr_Query.Fields.Fields[1].AsInteger;
 rResponce:=thr_Query.Fields.Fields[0].AsWideString;
 AResponseInfo.ContentLength := length( rResponce );
 AResponseInfo.ContentText := rResponce; <<<---- Заменяемая строка
 MemoLog.Lines.Add( rResponce );
 Append(FLOG); Writeln(FLOG, rResponce); Close(FLOG);
 ...
В целом REST работает нормально, выдает ответы на запросы в JSON или XML , но строки на кириллице выдаются не правильно.
Например в тестовом запросе выдается XML где есть слова "врач-терапевт"
Дальше я перебираю варианты функций перекодировки, и смотрю результаты
1. в ответе запроса в ARC клиента
2. в Memo поле в REST сервере (да, пока это не в виде службы сделано)
3. файле лога
- Код: Выделить всё
- ----------------
 ...
 AResponseInfo.ContentText := rResponce;
 ...
 ARC-client
 врач-терапевт
 Memo и файл txt
 врач-терапевт
 -----------------
 ...
 AResponseInfo.ContentText := UTF8ToWinCP(rResponce);
 ...
 
 ARC-client
 врач-терапевт
 Memo и файл txt
 врач-терапевт
 -----------------
 ...
 AResponseInfo.ContentText := WinCPtoUTF8(rResponce);
 ...
 
 ARC-client
 врач-терапевт
 Memo и файл txt
 врач-терапевт
 -----------------
 ...
 rResponce := WinCPtoUTF8(rResponce);
 AResponseInfo.ContentText := rResponce;
 ...
 ARC-client
 врач-терапевт
 Memo и файл txt
 врач-терапевт
 -----------------
 ...
 rResponce := UTF8toWinCP(rResponce);
 AResponseInfo.ContentText := rResponce;
 ARC-client
 пїЅпїЅпїЅпїЅ-пїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅ
 Memo и файл txt
 ????-???????? а в файле ����-��������
 -----------------
 var rResponce: string; // т.е. поменял widestring на string
 ...
 rResponce := UTF8toWinCP(rResponce);
 AResponseInfo.ContentText := rResponce;
 ARC-client
 врач-терапевт
 Memo и файл txt
 ????-???????? а в файле ����-��������
 -----------------
А под конец обнаружил, что в тех случаях когда в ARC-client строка отображается нормально (врач-терапевт)
, то это скорее делает с ама программа ARC , и так отображается только при выполнении запроса.
Если же закрыть вкладку запроса и открыть ее из истории то там результат уже отображается (????-????????)
Я уже не знаю что с этим делать и как побороть?
Как сделать нормальную выдачу ответа в UTF8 как положено?



