Написал простой 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 как положено?