UrlEncodeUnicode和浏览器导航错误

时间:2009-11-30 10:22:19

标签: .net url browser unicode redirect

我想将请求重定向到某个可能包含或不包含非ascii字符的网址(例如德语变音符号)。

使用网址的相关部分执行此操作:

var url = HttpUtility.UrlEncodeUnicode("öäü.pdf"); // -> "%u00f6%u00e4%u00fc.pdf"

然后发出重定向:

Response.Redirect(url, ...);

不会产生所需的行为。看来,当重定向到的URL是Unicode编码时,浏览器(IE,我已经测试过的Opera)不遵守此命令。普通的UrlEncode'd路径工作正常。

我已尝试在Web中进行设置.Config:

<configuration>
  <system.web>
    <globalization
      requestEncoding="utf-8"
      responseEncoding="utf-8"
    />
  </system.web>
</configuration>

这并没有改变一件事。

我能做些什么来让它发挥作用吗?

2 个答案:

答案 0 :(得分:3)

我不确定有问题,但你能尝试一下吗?

HttpUtility.UrlEncode("öäü.pdf")

HttpUtility.UrlEncode("öäü.pdf", Encoding.UTF8)

抱歉,如果我错误地理解你的问题。

答案 1 :(得分:2)

  

它生成的字符串包含每个双字节字符的两个%..序列,而不是使用UrlEncodeUnicode(...)时的单个%u ....序列。知道为什么会这样吗?

因为UTF-8使用多个字节来表示非ASCII字符,并且每个字节都是单独的URL编码。这是在URI中编码Unicode的标准方法,如IRI所使用的,默认情况下在所有现代Web浏览器中使用。

另一方面,

UrlEncodeUnicode%u00f6是完全虚假的废话,不应该用于任何事情,而且只是为了让你感到困惑。