Проблема кодирования ответа веб-службы - PullRequest
0 голосов
/ 20 февраля 2009

Я занимаюсь разработкой веб-служб на основе веб-службы ASP.Net asmx. Серверная сторона ответит байтом [] клиенту, закодированному в UTF-8, и клиенту преобразует байт [] в строку.

Моя путаница заключается в том, что символ английского фунта на стороне сервера (я сбрасываю данные непосредственно перед тем, как будет написан ответ Http, а символ на стороне сервера является правильным для фунта Англии) будет получен как ?? со стороны клиента.

Есть идеи, что не так? Я подозреваю, что это проблема кодирования, но я не знаю, как отлаживать дальше и какие-либо настройки (настройки от прокси-сервера веб-службы клиента?), Которые будут влиять?

спасибо заранее, George

Вот часть заголовка, которую я получил от Fiddler.

HTTP / 1.1 200 OK Дата: пт, 20 февраля 2009 16:51:30 GMT Сервер: Microsoft-IIS / 6.0 контроль кеша: нет кеша прагма: без кеша X-Powered-By: ASP.NET X-AspNet-версия: 2.0.50727 Cache-Control: приватный Тип контента: текст / xml Длина контента: 22752

xml version = "1.0" encoding = "utf-8"

1 Ответ

1 голос
/ 20 февраля 2009

Первое, что нужно сделать, это выяснить, что на самом деле отправляется, с точки зрения заголовков, объявления XML и байтов, формирующих сам текст.

Fiddler хорош в качестве HTTP-прокси, или вы можете использовать WireShark для прослушивания на уровне сети.

Как только вы получите эти три бита информации (заголовок Content-Type, объявление XML и байты, составляющие знак фунта), если вы обновите свой ответ, мы увидим, что мы можем сделать. Звучит странно, так как обычно ASP.NET понимает все правильно.

Как выглядит ваш код на стороне клиента? Это тоже обычный клиентский код веб-службы .NET?

РЕДАКТИРОВАТЬ: Попробуйте найти двоичный (шестнадцатеричный дамп) дисплей в Fiddler, чтобы вы могли найти байтов .

Однако я сильно подозреваю, что проблема заключается просто в выводе результата на консоль. Вот немного кода, который нужно использовать для вывода кодовых точек Unicode:

static void DumpString (string value)
{
    foreach (char c in value)
    {
        Console.Write ("{0:x4} ", (int)c);
    }
    Console.WriteLine();
}

Я подозреваю, что вы увидите 00A3 в выводе, который является Unicode для знака фунта. Это означает, что строка действительно достигла вашего клиента в порядке - но записать ее на консоль не удается.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...