У меня есть изображение:
http://localhost/WOZNIAK.png
Это выходит хорошо. Тем не менее, если я URL переписать это с этим правилом:
<rewrite url="~/images/articles/(.*)$" to="~/handlers/displayimage.ashx?src=$1&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-кодировке параметра строки запроса в правиле перезаписи.