我想将请求重定向到某个可能包含或不包含非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>
这并没有改变一件事。
我能做些什么来让它发挥作用吗?
答案 0 :(得分:3)
我不确定有问题,但你能尝试一下吗?
HttpUtility.UrlEncode("öäü.pdf")
或
HttpUtility.UrlEncode("öäü.pdf", Encoding.UTF8)
抱歉,如果我错误地理解你的问题。
答案 1 :(得分:2)
它生成的字符串包含每个双字节字符的两个%..序列,而不是使用UrlEncodeUnicode(...)时的单个%u ....序列。知道为什么会这样吗?
因为UTF-8使用多个字节来表示非ASCII字符,并且每个字节都是单独的URL编码。这是在URI中编码Unicode的标准方法,如IRI所使用的,默认情况下在所有现代Web浏览器中使用。
另一方面, UrlEncodeUnicode
和%u00f6
是完全虚假的废话,不应该用于任何事情,而且只是为了让你感到困惑。