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

Общие вопросы программирования, алгоритмы и т.п.

Модератор: Модераторы

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

Сообщение alik1 » 27.02.2009 21:22:32

Использую 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 - последние
alik1
новенький
 
Сообщения: 24
Зарегистрирован: 16.01.2007 01:14:03

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

Сообщение Mr.Smart » 27.02.2009 21:29:20

1. Данные представленны в кодировке Unicode - это не совсе UTF8
2. Судя по дампу (представленному вами) данные верны (в кодировке Unicode или UTF16) и соответствуют
Код: Выделить всё
<Message>????????? ?????</Message>
Mr.Smart
долгожитель
 
Сообщения: 1796
Зарегистрирован: 29.03.2008 01:01:11
Откуда: из леса!

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

Сообщение alik1 » 28.02.2009 06:13:07

скажем так, данные которые я показываю в дампе, действительно результат сохранения потока в уникод. но изначально это обычный стринг, в котором послан 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 в дельфи.
alik1
новенький
 
Сообщения: 24
Зарегистрирован: 16.01.2007 01:14:03

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

Сообщение Vadim » 28.02.2009 07:31:03

А вот это зачем у Вас написано:
alik1 писал(а):ws := Utf8Decode(MySoapInt.RealFunc);
...
PWideChar(ws)^, Length(ws)*2

???
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

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

Сообщение Mr.Smart » 28.02.2009 16:40:31

Функция ReadXMLFile прекрасно работает с UTF-8 так что уберите преобразование Utf8Decode
Mr.Smart
долгожитель
 
Сообщения: 1796
Зарегистрирован: 29.03.2008 01:01:11
Откуда: из леса!

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

Сообщение alik1 » 01.03.2009 04:36:09

чувствую, что дискуссия отошла от моей проблематики )

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

получаю вместо кирилицы - вопросики ...
alik1
новенький
 
Сообщения: 24
Зарегистрирован: 16.01.2007 01:14:03

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

Сообщение Vadim » 01.03.2009 05:24:13

MessageBox(0, PChar(UTF8ToAnsi(MySoapImpl.MyFunc)), nil, 0);?
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

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

Сообщение alik1 » 01.03.2009 15:26:28

Vadim писал(а):MessageBox(0, PChar(UTF8ToAnsi(MySoapImpl.MyFunc)), nil, 0);?

не хотелось бы уходить в ансишные строки, мне это не совсем подходит у меня и винда не русская :)
alik1
новенький
 
Сообщения: 24
Зарегистрирован: 16.01.2007 01:14:03

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

Сообщение Vadim » 01.03.2009 17:46:38

alik1 писал(а):не хотелось бы уходить в ансишные строки...

Не уходите. :) Только скажите, что Вы увидели именно с этим MessageBox.
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

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

Сообщение alik1 » 02.03.2009 01:33:22

вы не поверите, те же самые вопросительные знаки ;) на самом деле я всё же подозреваю, что "зарезание" происходит в имплементации стрингов в webtoolkit-e
alik1
новенький
 
Сообщения: 24
Зарегистрирован: 16.01.2007 01:14:03

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

Сообщение Sergei I. Gorelkin » 02.03.2009 03:37:45

А что за webtoolkit - то? Это часть FPC или сторонняя библиотека?
Аватара пользователя
Sergei I. Gorelkin
энтузиаст
 
Сообщения: 1405
Зарегистрирован: 24.07.2005 14:40:41
Откуда: Зеленоград

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

Сообщение alik1 » 02.03.2009 04:03:38

http://wiki.lazarus.freepascal.org/Web_Service_Toolkit

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

Добавлено спустя 12 часов 5 минут 15 секунд:
вопрос снят с повестки дня - как только стали передавать utf8 строку в base64, сразу же всё отлично заработало :)
alik1
новенький
 
Сообщения: 24
Зарегистрирован: 16.01.2007 01:14:03


Вернуться в Общее

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 6

Рейтинг@Mail.ru