Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/259.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 获得U+;fffd/65533代替查询字符串中的特殊字符_C#_.net_Flash_Encoding_Url Encoding - Fatal编程技术网

C# 获得U+;fffd/65533代替查询字符串中的特殊字符

C# 获得U+;fffd/65533代替查询字符串中的特殊字符,c#,.net,flash,encoding,url-encoding,C#,.net,Flash,Encoding,Url Encoding,我有一个C#.net web项目,其全球化标记设置为: <globalization requestEncoding="utf-8" responseEncoding="utf-8" culture="nb-no" uiCulture="no"/> 我对字符编码知之甚少,但似乎已经给了ø一个unicode替换字符,对吗 我试图将全球化标记更改为: <globalization requestEncoding="iso-8859-1" responseEncoding="utf

我有一个C#.net web项目,其全球化标记设置为:

<globalization requestEncoding="utf-8" responseEncoding="utf-8" culture="nb-no" uiCulture="no"/>
我对字符编码知之甚少,但似乎已经给了ø一个unicode替换字符,对吗

我试图将全球化标记更改为:

<globalization requestEncoding="iso-8859-1" responseEncoding="utf-8" culture="nb-no" uiCulture="no"/>
我该怎么办

亲切问候,


nitech

我认为你的问题在于flash,而不是.net。 它以一种奇怪的方式发送特殊字符。
在将搜索字符串发送到服务器之前,请尝试对其进行URL编码。

我认为您的问题在于flash,而不是.net。 它以一种奇怪的方式发送特殊字符。
在将搜索字符串发送到服务器之前,请尝试对其进行URL编码。

如果应用程序希望URL编码的请求基于UTF-8,则字符“
ø
”应为“
%C3%B8
”,而不是“
%F8
”。无论您使用什么函数来转义/编码该请求,您可能都需要将底层字符编码的名称“UTF-8”传递给它。如果应用程序希望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

事实证明,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

问题来自Firefox/Asp.Net的组合。当您在Firefox的地址栏中手动输入URL时,如果URL包含法语或瑞典语字符,Firefox将默认使用“ISO-8859-1”对URL进行编码

但是当asp.net收到这样的url时,它认为它是utf-8编码的。。。编码字符变成“U+fffd”。我在asp.net中找不到一种方法来检测url是否为“ISO-8859-1”。请求。编码设置为utf-8…:(

有几种解决办法:

  • 放在你的Web.config中。但是你可能会遇到其他问题,你的应用程序将不再是标准的(它将不能与日语等语言一起工作)…而且无论如何,我更喜欢使用UTF-8

  • 转到Firefox中的about:config并将
    network.standard url.encode-query-utf8
    的值设置为true。它现在适用于您(Firefox将使用utf-8对您的所有url进行编码)。但不适用于其他任何人

  • 我能想到的最糟糕的解决方案是用代码处理这个问题。如果默认解码不起作用,我们将使用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);
    
它可以使用超链接和手动输入的url,法语、英语或日语。但我不知道它将如何处理其他编码,如ISO8859-5(俄语)

有谁有更好的解决方案吗


这只解决了手动输入url的问题。在超链接中,不要忘记在服务器上使用HttpUtility.UrlEncode对url参数进行编码,或者在javascript代码上使用encodeURIComponent对url参数进行编码。然后使用HttpUtility.UrlDecode对其进行解码。

当您在Firef中手动输入url时,问题来自Firefox/Asp.Net的组合如果url包含法语或瑞典语字符,Firefox将默认使用“ISO-8859-1”对url进行编码

    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;
    }
但是当asp.net收到这样一个url时,它认为它是utf-8编码的…编码字符变成了“U+fffd”。我在asp.net中找不到方法来检测url是“ISO-8859-1”。请求。编码设置为utf-8…:(

有几种解决办法:

  • 放在你的Web.config中。但是你可能会遇到其他问题,你的应用程序将不再是标准的(它将不能与日语等语言一起工作)…而且无论如何,我更喜欢使用UTF-8

  • 转到Firefox中的about:config并将
    network.standard url.encode-query-utf8
    的值设置为true。它现在适用于您(Firefox将使用utf-8对您的所有url进行编码)。但不适用于其他任何人

  • 我能想到的最糟糕的解决方案是用代码处理这个问题。如果默认解码不起作用,我们将使用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);
    
它可以使用超链接和手动输入的url,法语、英语或日语。但我不知道它将如何处理其他编码,如ISO8859-5(俄语)

有谁有更好的解决方案吗


这只解决了手动输入url的问题。在超链接中,不要忘记在服务器上使用HttpUtility.UrlEncode对url参数进行编码,或者在javascript代码上使用encodeURIComponent对url参数进行编码。然后使用HttpUtility.UrlDecode对其进行解码。

好的。flash中有一个名为escape的函数。我已经尝试过了,但没有任何区别。Also、 如果我只是手动将url写入地址字段,我也会遇到同样的问题。我们在网站上所做的是,根据客户的语言,我们在请求和响应中有专用的ISO编码。因为许多客户不理解UTF-16。这也是可能的。嗯,在flash中有一个名为escape.I的函数“我尝试过这个方法,但没有任何区别。此外,如果我只是手动将url写入地址字段,我也会遇到同样的问题。我们在网站上所做的是,根据客户的语言,我们在请求和响应中有专用的ISO编码。因为许多客户不理解UTF-16。这也是一种可能性。您可以你有什么事吗
    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;
    }