C # HttpRequest и разные кодировки - PullRequest
3 голосов
/ 04 ноября 2008

Вот моя проблема. У меня есть веб-сайт в ASP.NET / C #, который получает некоторые данные через GET / POST

Это «заполненные пользователем» данные, но не через веб-страницу, это программное обеспечение, которое связывается с моим сервером.

Проблема в том, что это программное обеспечение отправляет данные в кодировке ISO-8859-1 (поэтому Café будет отправлено как Caf% e9), а остальная часть моего SW / DB - Unicode

Кроме того, данные полностью искажаются, что делает невозможным восстановление отправленного сообщения: /

Как лучше всего с этим справиться?

Я пытался установить Request.ContentEncoding (перед чтением), но безрезультатно.

Ответы [ 5 ]

3 голосов
/ 26 июля 2010

Единственное, что здесь сработало, это добавление следующего кода в web.config:

<configuration>
  <system.web>
    <globalization requestEncoding="iso-8859-1"/>
  </system.web>
</configuration>

А затем используйте

Request["varName"]

Не используйте HttpUtility.UrlDecode или HttpUtility.UrlEncode, эти 2 работают только с необработанной строкой запроса. Запрос [] уже выполняет декодирование для вас.

Спасибо JamesP за то, что он сам опубликовал идею.

1 голос
/ 10 ноября 2008

Оригинальный автор вопроса здесь.

Мне помогло предложение Георга о настройке переменных Web.config, я поставил

requestEncoding = "ISO-8859-1"

И теперь все работает, спасибо!

1 голос
/ 05 ноября 2008

Посмотрите на

Как: выбрать кодировку для глобализации веб-страницы ASP.NET

Short:

В web.config пишите

<configuration>
  <system.web>
    <globalization
      fileEncoding="utf-8"
      requestEncoding="utf-8"
      responseEncoding="utf-8"
      culture="en-US"
      uiCulture="de-DE"
    />
  </system.web>
</configuration>

Удалить записи кодирования в заголовках aspx.

Если utf-8 не верен, попробуйте utf-16

Надеюсь, это поможет.

1 голос
/ 04 ноября 2008

% e9 ​​- это всего лишь кодировка UrlEncoded. Server.UrlДекодируйте строку запроса.

0 голосов
/ 06 ноября 2008

Если я вас правильно понял, вы извлекаете эту информацию из HTTP-запроса. Я собираюсь предположить, что это тело HTTP-запроса в кодировке.

Вы можете использовать System.Text.Encoding.GetEncoding (...), чтобы получить объект Encoding для ISO-8859-1. Затем вызовите GetDecoder () для этого объекта кодирования и используйте его для интерпретации тела запроса. В идеале вы должны определить тип кодировки, который вы загружаете из Encoding.GetEncoding (...), из значений заголовка в запросе, поэтому поддерживаются серверы с различными конфигурациями.

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