C# 获得U+;fffd/65533代替查询字符串中的特殊字符
我有一个C#.net web项目,其全球化标记设置为: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
<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并将
的值设置为true。它现在适用于您(Firefox将使用utf-8对您的所有url进行编码)。但不适用于其他任何人network.standard url.encode-query-utf8
- 我能想到的最糟糕的解决方案是用代码处理这个问题。如果默认解码不起作用,我们将使用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的问题。在超链接中,不要忘记在服务器上使用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并将
的值设置为true。它现在适用于您(Firefox将使用utf-8对您的所有url进行编码)。但不适用于其他任何人network.standard url.encode-query-utf8
- 我能想到的最糟糕的解决方案是用代码处理这个问题。如果默认解码不起作用,我们将使用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的问题。在超链接中,不要忘记在服务器上使用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;
}