Страница 1 из 1

Проблемма soap и utf8

СообщениеДобавлено: 27.02.2009 21:22:32
alik1
Использую Web Service Toolkit для работы с функциями сервера и столкнулся с таким траблом .. посылают мне строчку utf8, a приходит:

Код: Выделить всё
00000240                     3C 00  4D 00 65 00 73 00 73 00         <.M.e.s.s.
00000256   61 00 67 00 65 00 3E 00  3F 00 3F 00 3F 00 3F 00   a.g.e.>.?.?.?.?.
00000272   3F 00 3F 00 3F 00 3F 00  3F 00 20 00 3F 00 3F 00   ?.?.?.?.?. .?.?.
00000288   3F 00 3F 00 3F 00 3C 00  2F 00 4D 00 65 00 73 00   ?.?.?.<./.M.e.s.
00000304   73 00 61 00 67 00 65 00  3E 00                     s.a.g.e.>.


есть ли возможность указать какой то хитрый тип данных, a не просто стринг, чтоб решить эту пробмлему?

версии WST, Laarus и fpc - последние

Re: Проблемма soap и utf8

СообщениеДобавлено: 27.02.2009 21:29:20
Mr.Smart
1. Данные представленны в кодировке Unicode - это не совсе UTF8
2. Судя по дампу (представленному вами) данные верны (в кодировке Unicode или UTF16) и соответствуют
Код: Выделить всё
<Message>????????? ?????</Message>

Re: Проблемма soap и utf8

СообщениеДобавлено: 28.02.2009 06:13:07
alik1
скажем так, данные которые я показываю в дампе, действительно результат сохранения потока в уникод. но изначально это обычный стринг, в котором послан utf8. хотел продемонстрировать, что тулкит где то "зарезает" utf8 ...
Код: Выделить всё
procedure TMy.ExecMySoapFunc;
var m : TMemoryStream;
     ws : widestring;
begin
   ws := Utf8Decode(MySoapInt.RealFunc); //soap function that return utf8 string ...
   m := TMemoryStream.Create;
   m.Write(PWideChar(ws)^, Length(ws)*2);
   m.Position:= 0;
   m.SaveToFile('xml_set.txt'); //<- dump from this file
   m.Position:=0;
   ReadXMLFile(fXML,m);
   m.Free;
   //...
end;


сервер прекрасно работает и посылает кирилицу, которую не зарезает HTTPRIO в дельфи.

Re: Проблемма soap и utf8

СообщениеДобавлено: 28.02.2009 07:31:03
Vadim
А вот это зачем у Вас написано:
alik1 писал(а):ws := Utf8Decode(MySoapInt.RealFunc);
...
PWideChar(ws)^, Length(ws)*2

???

Re: Проблемма soap и utf8

СообщениеДобавлено: 28.02.2009 16:40:31
Mr.Smart
Функция ReadXMLFile прекрасно работает с UTF-8 так что уберите преобразование Utf8Decode

Re: Проблемма soap и utf8

СообщениеДобавлено: 01.03.2009 04:36:09
alik1
чувствую, что дискуссия отошла от моей проблематики )

значит так .. получаю строку utf8 от soap-функции такого вида
Код: Выделить всё
...
  MySoap = interface(IInvokable)
    function MyFunc():string;
  end;
...
procedure Test;
begin
  MessageBoxW(0, PWideChar(UTF8Decode(MySoapImpl.MyFunc)), nil, 0);
end;

получаю вместо кирилицы - вопросики ...

Re: Проблемма soap и utf8

СообщениеДобавлено: 01.03.2009 05:24:13
Vadim
MessageBox(0, PChar(UTF8ToAnsi(MySoapImpl.MyFunc)), nil, 0);?

Re: Проблемма soap и utf8

СообщениеДобавлено: 01.03.2009 15:26:28
alik1
Vadim писал(а):MessageBox(0, PChar(UTF8ToAnsi(MySoapImpl.MyFunc)), nil, 0);?

не хотелось бы уходить в ансишные строки, мне это не совсем подходит у меня и винда не русская :)

Re: Проблемма soap и utf8

СообщениеДобавлено: 01.03.2009 17:46:38
Vadim
alik1 писал(а):не хотелось бы уходить в ансишные строки...

Не уходите. :) Только скажите, что Вы увидели именно с этим MessageBox.

Re: Проблемма soap и utf8

СообщениеДобавлено: 02.03.2009 01:33:22
alik1
вы не поверите, те же самые вопросительные знаки ;) на самом деле я всё же подозреваю, что "зарезание" происходит в имплементации стрингов в webtoolkit-e

Re: Проблемма soap и utf8

СообщениеДобавлено: 02.03.2009 03:37:45
Sergei I. Gorelkin
А что за webtoolkit - то? Это часть FPC или сторонняя библиотека?

Re: Проблемма soap и utf8

СообщениеДобавлено: 02.03.2009 04:03:38
alik1
http://wiki.lazarus.freepascal.org/Web_Service_Toolkit

вроде бы официальный ...

Добавлено спустя 12 часов 5 минут 15 секунд:
вопрос снят с повестки дня - как только стали передавать utf8 строку в base64, сразу же всё отлично заработало :)