我有一个。网网络项目,该项目有一个全球化的标签设置为:

<globalization requestEncoding="utf-8" responseEncoding="utf-8" culture="nb-no" uiCulture="no"/>

当这个网址一个闪光应用程序(你得到同样的问题当你进入URL手在浏览器):c_product_search.aspx?搜索=kjøkken(或者:c_product_search-aspx?搜索=kj%F8kken

两者的回返以下文字代码:

k U+006b 107
j U+006a 106
� U+fffd 65533
k U+006b 107
k U+006b 107
e U+0065 101
n U+006e 110

我不知道太多关于字符编码,但它似乎是在直径已经给出一个unicode替换角色,对吗?

我试图改变的全球化的标签中:

<globalization requestEncoding="iso-8859-1" responseEncoding="utf-8" culture="nb-no" uiCulture="no"/>

提出请求的工作。但是,现在,其他搜索我的网页上停止工作。

我也试过的以下具有相似的结果:

NameValueCollection qs = HttpUtility.ParseQueryString(Request.QueryString.ToString(), Encoding.GetEncoding("iso-8859-1"));
string search = (string)qs["search"];

我应该怎么做?

亲切的问候,

nitech

有帮助吗?

解决方案

问题来自联合Firefox/Asp。网。当你的手工输入一个网址在火狐的地址栏,如果url包含法语或瑞典语的人物,Firefox将编url"ISO-8859-1"默认。

但是当asp.net 接到这样一个网址,它认为,这是utf-8编码...和编码的字成为"U+fffd".我找不到的方式asp.net 检测,网址是"ISO-8859-1".请求。编码设为utf-8...:(

若干解决方案的存在:

  • <globalization requestEncoding="iso-8859-1" responseEncoding="iso-8859-1"/> 在你的网页。config。但你可以comme与其他问题,并且应用程序不再是标准的(它不会起作用的语言,如日本)...不管怎样,我更喜欢使用UTF-8!

  • 去约:配置在火狐,并设置的价值 network.standard-url.encode-query-utf8 来真实的。它现在将对你的工作(Firefox将进行编码,所有你的网址与utf-8).但不适用于任何其他人...

  • 最最糟糕的解决方案我可以进来,与是处理这个用的代码。如果默认解码不起作用,我们重新分析查询与iso8859-1:

    string query = Request.QueryString["search"];
    if (query.Contains("%ufffd"))
        query = HttpUtility.ParseQueryString(Request.Url.Query, Encoding.GetEncoding("iso-8859-1"))["search"];
    query = HttpUtility.UrlDecode(query);
    

它适用超级链接和手工输入网址,以法语、英语或日语。但我不知道它会如何处理其他编码喜欢ISO8859-5(俄罗斯)...

没有任何人有一个更好的解决办法?

这只解决了该问题的手工输入网址。在你的超链接,不要忘记编码网址参数与HttpUtility.UrlEncode在服务器上,或encodeURIComponent在javascript code.和使用HttpUtility.UrlDecode解码。

其他提示

    public string GetEncodedQueryString(string key)
    {
        string query = Request.QueryString[key];
        if (query != null)
            if (query.Contains((char)0xfffd))
                query = HttpUtility.ParseQueryString(Request.Url.Query, Encoding.GetEncoding("iso-8859-1"))[key];
        return query;
    }

我认为你的问题是在闪存中,而不是.net。 它以奇怪的方式发送特殊字符。 尝试将您发送到服务器的搜索字符串urlencode。

如果应用程序期望URL编码的请求基于UTF-8,则字符<!>“ø <!>”;应该是<!>“; %C3%B8 <!>”;而不是<!>; %F8 <!>“;无论您使用什么函数来转义/编码该请求,您可能需要传递基础字符编码的名称,<!>“UTF-8 <!>”。

事实证明,ActionScript 2.0将使用UTF-8发送编码/转义的URL,而ActionScript 3.0则使用ISO-8859-1。解决此问题的方法是,如果在URL中指定了编码,则更改Global.asax中的Request.Encoding值:

void Application_BeginRequest(object sender, EventArgs e)
{
    HttpContext ctx = HttpContext.Current;

    // encoding specified?
    if (!String.IsNullOrEmpty(Request["encoding"]))
    {
        ctx.Request.ContentEncoding = System.Text.Encoding.GetEncoding(ctx.Request["encoding"]);
    }        
}

可以采用不同的方式吗?

此致 nitech

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top