Строка ASP.NET Unicode отображается неправильно - PullRequest
3 голосов
/ 19 декабря 2011

У меня есть изображение:

http://localhost/WOZNIAK.png

Это выходит хорошо. Тем не менее, если я URL переписать это с этим правилом:

<rewrite url="~/images/articles/(.*)$" to="~/handlers/displayimage.ashx?src=$1&amp;type=article" processing="stop"/>

И посетите этот URL:

http://localhost/images/articles/WOZNIAK.png

Это не показывает изображение. Мой обработчик начинается с кода:

public void ProcessRequest (HttpContext context) {

    string ImageSrc = context.Request.QueryString["src"];
    string ImageType = context.Request.QueryString["type"];

И если я возьму значение ImageSrc, то получится:

WOŹNIAK.png

Если я явно установлю ImageSrc в значение ImageSrc = "WOZNIAK.png"; в коде, изображение будет отображаться нормально.

Что мне нужно сделать, чтобы эти символы Юникода прошли правильно? Это очень проблематично для нас, так как у нас есть пользователи по всему миру, загружающие большие наборы изображений, некоторые из которых содержат много имен с символами Unicode.

Переименование или изменение этих изображений любым способом очень проблематично из-за дизайна, поэтому мне бы очень хотелось решить эту проблему!

Редактировать

Похоже, мне следует Server.UrlEncode все параметры строки запроса. Может ли это быть причиной? Я не уверен, возможно ли это сделать в правиле перезаписи URL?

Если установить строку:

ImageSrc = context.Server.UrlDecode("WO%c5%b9NIAK.png");

Работает. Поэтому я полагаю, что проблема заключается в URL-кодировке параметра строки запроса в правиле перезаписи.

1 Ответ

2 голосов
/ 19 декабря 2011

Я исправил это. Intelligencia имеет преобразование кодирования URL, которое можно использовать следующим образом:

<rewrite url="~/images/articles/(.*)$" to="~/handlers/displayimage.ashx?src=${encode($1)}&amp;type=article" processing="stop"/>

Затем отобразите изображение в следующем коде:

string ImageSrc = context.Server.UrlDecode(context.Request.QueryString["src"]);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...