ASP.NET Unicode字符串显示不正确

时间:2011-12-19 16:48:49

标签: c# asp.net string unicode iis-7.5

我有图片:

http://localhost/WOZNIAK.png

这很好。但是,如果我使用此规则重写URL:

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

访问此网址:

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字符正常传递?这对我们来说是非常有问题的,因为我们让世界各地的用户上传大量图像,其中一些包含许多带有Unicode字符的名称。

由于设计的原因,以任何方式重命名或修改这些图像是非常有问题的,所以我真的想要解决这个问题!

修改

看来我应该Server.UrlEncode所有查询字符串参数。这可能是原因吗?我不确定是否可以在URL重写规则中执行此操作?

如果我将字符串设置为:

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

有效。所以我想问题是在重写规则中编码查询字符串参数的URL。

1 个答案:

答案 0 :(得分:2)

我修好了。 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"]);