回发后的编码损坏

时间:2010-07-05 15:34:55

标签: c# asp.net unicode encoding character-encoding

我有一个查询字符串,其参数值包含编码为å的挪威字符%e5。该页面包含一个带有action属性的表单,该表单由ASP.Net自动填充。当URL输出到所述属性时,它将使用完整的两字节编码进行打印:%u00e5

回发时,调试背后的代码似乎没问题。但是,页面实际上会重定向到自身(出于其他原因),重定向位置标头如下所示:Location: /myFolder/MyPage.aspx?Param1=%C3%A5

所以%e5已被翻译为%C3%A5,这会以某种方式打破输出。

在HTML文本中,在通过HttpUtility.HtmlEncode输出后,损坏的字符看起来像Ã¥

整个Web应用程序采用ISO8859-1编码。

PS。在发布表单之前从action属性中的输出%u00e5中删除u00时,一切都输出得很好。但错误似乎是从%e5%C3%A5的转换。 (当然还有自我重定向,但这是另一回事。)

任何指针?

1 个答案:

答案 0 :(得分:0)

我最终解决的解决方案是手动编码重定向URL。

public void ReloadPage()
{
    UrlBuilder url = new UrlBuilder(Context, Request.Path);
    foreach (string queryParam in Request.QueryString.AllKeys)
    {
        string queryParamValue = Request.QueryString[queryParam];
        url.AddQueryItem(queryParam, queryParamValue);
    }
    Response.Redirect( url.ToString(), true);
}

url.AddQueryItem基本上执行HttpContext.Server.UrlDecode(queryParamValue),url.ToString构建查询字符串,并为每个查询项执行HttpContext.Server.UrlEncode(queryParamValue)。

UrlBuilder是我们库中已经存在的类,所以一旦我发现问题并意识到C#/ .Net没有为此提供工具,编写修复程序很快:)