gpt4 book ai didi

c# - 从查询字符串中获取 U+fffd/65533 而不是特殊字符

转载 作者:太空宇宙 更新时间:2023-11-03 22:27:28 24 4
gpt4 key购买 nike

我有一个 C# .net web 项目,它的全局化标签设置为:

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

当此 URL 是 Fl​​ash 应用程序时(在浏览器中手动输入 URL 时会遇到同样的问题):c_product_search.aspx?search=kjøkken(或者:c_product_search-aspx?search=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"];

我该怎么办?

亲切的问候,

科技

最佳答案

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

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

存在几种解决方案:

  • <globalization requestEncoding="iso-8859-1" responseEncoding="iso-8859-1"/>在你的 Web.config 中。但是您可能会遇到其他问题,并且您的应用程序将不再是标准的(它不能与日语等语言一起使用)...而且无论如何,我更喜欢使用 UTF-8!

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

  • 我能想到的最不糟糕的解决方案是用代码来处理这个问题。如果默认解码不起作用,我们用 iso8859-1 重新解析 QueryString:

    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 或在 javascript 代码上使用 encodeURIComponent 对 url 参数进行编码。并使用 HttpUtility.UrlDecode 对其进行解码。

关于c# - 从查询字符串中获取 U+fffd/65533 而不是特殊字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/806133/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com