UrlEncodeUnicode и ошибки навигации браузера - PullRequest
3 голосов
/ 30 ноября 2009

Я хочу перенаправить запрос на некоторый URL-адрес, который может содержать или не содержать символы не ascii (например, немецкие умляуты).

Делаем это с соответствующей частью URL:

var url = HttpUtility.UrlEncodeUnicode("öäü.pdf"); // -> "%u00f6%u00e4%u00fc.pdf"

и выдача перенаправления:

Response.Redirect(url, ...);

не даст желаемого поведения. Похоже, что браузер (IE, Opera, насколько я тестировал) не учитывает эту команду, когда URL-адрес для перенаправления кодируется в Unicode. Обычные пути UrlEncode работают нормально.

Я попытался установить это в Web.Config:

<configuration>
  <system.web>
    <globalization
      requestEncoding="utf-8"
      responseEncoding="utf-8"
    />
  </system.web>
</configuration>

Это ничего не изменило.

Могу ли я что-нибудь сделать, чтобы заставить это работать?

Ответы [ 2 ]

3 голосов
/ 30 ноября 2009

Я не уверен с вопросом, но не могли бы вы попробовать с этим?

HttpUtility.UrlEncode("öäü.pdf")

или

HttpUtility.UrlEncode("öäü.pdf", Encoding.UTF8)

Извините, если я неправильно понял ваш вопрос.

2 голосов
/ 01 декабря 2009

Создает строки, содержащие две последовательности% .. для каждого двухбайтового символа, в отличие от одной последовательности% u .... при использовании UrlEncodeUnicode (...). Есть идеи, почему это так?

Поскольку UTF-8 использует несколько байтов для представления не-ASCII-символов, и каждый байт кодируется по URL-адресу отдельно. Это стандартный способ кодирования Unicode в URI, используемый IRI и по умолчанию во всех современных веб-браузерах.

UrlEncodeUnicode и %u00f6, с другой стороны, являются абсолютно ложной чепухой, которая не должна использоваться ни для чего, и была помещена туда только, чтобы сбить вас с толку.

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