Тело мыла имеет кодировку utf-8 дважды - PullRequest
0 голосов
/ 19 мая 2009

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

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

1 Ответ

1 голос
/ 19 мая 2009

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

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

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

РЕДАКТИРОВАТЬ: Судя по вашему комментарию, у вас возникли проблемы с получением данных формы HTML, прежде чем вы подключитесь к веб-службе. Если пользователь ввел «å» в форму, это то, что вы должны увидеть при отладке в Eclipse. Если вы помещаете неверные данные в свой веб-сервис, неудивительно, что вы выводите неверные данные на другом конце. Я предлагаю вам запустить WireShark , чтобы увидеть точно то, что отправляет вам браузер, как с точки зрения необработанных байтов, так и с точки зрения кодировки содержимого, которое он указывает. Я предполагаю, что ваш веб-сервер воспринимает его как ISO-8859-1, но на самом деле это UTF-8.

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

...