2009-11-30 51 views
3

我想将请求重定向到某个可能包含或不包含非ascii字符的URL(例如德语变音符号)。UrlEncodeUnicode和浏览器导航错误

与URL的相关部分这样做:

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

,然后发出重定向:

Response.Redirect(url, ...); 

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

我曾尝试在web.config中设置这样的:

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

这并没有改变任何事情。

有什么我可以做的,让这个工作?

回答

3

我不确定有问题,但可以试试吗?

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

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

对不起,如果我理解你的问题走错了路。

+0

有趣的是,使用HttpUtility.UrlEncode(...,Encoding.UTF8)实际上可以工作。 当使用UrlEncodeUnicode(...)时,它会生成包含两个%..序列的字符串,而不是单个的%u ....序列。任何想法为什么这是?非常感谢! – skarmats

+0

这不是一个答案。为什么这是upvoted? –

+0

最后一条评论从头开始,看起来我无法正确阅读。 –

2

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

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

UrlEncodeUnicode%u00f6,在另一方面,是不应该被用于任何虚假完全胡说八道,并一直放在那里只是为了迷惑你。