Вопрос

Мы используем веб-сервис, который ожидает кодировку UTF-8.Фреймворком, который мы используем на клиенте, является Apache Axis2.Мы вызываем веб-службу, и тело soap содержит строки в UTF-8.Проблема в том, что кажется, что тело "дважды закодировано".То есть у нас есть символ 'å'.Представление 'å' в utf-8 в формате utf-8 равно C3 A5, однако в наших журналах мы видим, что отправленное (двойное) кодированное значение равно C3 83 C2 A5.

Кто-нибудь сталкивался с подобными проблемами?

Это было полезно?

Решение

Не совсем понятно, как вы вызываете веб-службу.Принимает ли метод в веб-службе просто строку?Если да, то как выглядит ваша строка в Java?Все строки в Java закодированы в формате UTF-16 - если вы преобразуете двоичное представление UTF-8 в строку, беря каждый байт и превращая его в символ, то в этом проблема.

Если бы вы могли показать, как выглядит вызываемый вами метод и как вы его вызываете, это бы очень помогло.

Как бы то ни было, в прошлом я без проблем использовал Axis со строками, отличными от ASCII.Я сильно подозреваю, что это проблема с тем, как вы его используете, а не с самой Axis, хотя я готов доказать свою неправоту :)

Редактировать:Судя по вашему комментарию, похоже, у вас возникли проблемы с получением данных HTML-формы до того, как вы попали в веб-службу.Если пользователь ввел "å" в форму, то это то, что вы должны увидеть при отладке в Eclipse.Если вы размещаете неверные данные в своем веб-сервисе, неудивительно, что вы получаете неверные данные на другом конце.Я предлагаю тебе бежать Проволочная метка чтобы увидеть именно так что браузер отправляет вам, как с точки зрения необработанных байтов, так и с точки зрения того, какую кодировку контента он указывает.Я предполагаю, что ваш веб-сервер обрабатывает его как ISO-8859-1, но на самом деле это UTF-8.

Как только вы правильно получите строку из формы, я подозреваю, что вы обнаружите, что при передаче ее веб-сервису вообще не возникнет проблем.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top