【发布时间】:2010-07-05 15:34:54
【问题描述】:
我有一个查询字符串,其参数值包含编码为%e5 的挪威字符å。该页面包含一个带有 action 属性的表单,该属性由 ASP.Net 自动填充。当 URL 输出到所述属性中时,它会以完整的两字节编码打印:%u00e5。
在调试后面的代码时,回发这似乎没问题。然而,页面实际上会重定向到自身(出于某种其他原因),并且重定向位置标头如下所示:Location: /myFolder/MyPage.aspx?Param1=%C3%A5
所以%e5 已被翻译成%C3%A5,这会以某种方式破坏输出。
在 HTML 文本中,损坏的字符在通过 HttpUtility.HtmlEncode 输出后看起来像 Ã¥。
整个网络应用程序采用 ISO8859-1 编码。
PS。在发布表单之前从 action 属性中的输出%u00e5 中删除 u00 时,一切都很好地输出。但错误似乎是从%e5 到%C3%A5 的翻译。 (当然还有自我重定向,但这是另一回事。)
任何指针?
【问题讨论】:
-
这不是错误,
%C3%A5只是 å 的 URL 编码的 UTF-8 版本。错误在于转换为 HTML:URL 中每个编码的 UTF-8 序列必须转换回 Unicode 代码点,然后进行 HTML 编码。 -
实际上,根据w3schools.com/tags/ref_urlencode.asp,
%e5forå似乎URL编码是正确的。看来问题是重定向IIS输出带有utf-8编码的location标头,即%e5被翻译成%c3%a5
标签: c# asp.net unicode encoding character-encoding