gpt4 book ai didi

asp.net - 在 .Net http 处理程序中编码 u 元音变音时出现问题

转载 作者:数据小太阳 更新时间:2023-10-29 06:09:08 24 4
gpt4 key购买 nike

我有一个 JavaScript 请求转到 ASP.Net (2.0) HTTP 处理程序,该处理程序将请求传递给 Java Web 服务。在此系统中,特殊字符(例如带有重音符号的字符)无法正确传递。

例如

  • 人工输入:杜塞尔多夫
  • 成为对 http://site/serviceproxy.ashx?q=D%FCsseldorf 的 JavaScript 异步请求,目前在 ISO-8859-1 和 UTF-8 中有效据我所知。 (除非它是 UTF-8 中的 %c3%bc)
  • HttpContext.Current.Request.QueryString.Get("q") 返回 D�sseldorf,这是麻烦开始的地方。
  • 但是 HttpUtility.UrlEncode(HttpContext.Current.Request.QueryString.Get("q"), Encoding.GetEncoding("ISO-8859-1")) 返回 D%3fsseldorf (一个“?”)
  • HttpUtility.UrlEncode(HttpContext.Current.Request.QueryString.Get("q"), Encoding.UTF8)返回D%ef%bfsseldorf

所以它的值没有被正确解码或重新编码以传递给 java 服务。

  • 注意 HttpContext.Current.Request.Url.Query?q=D%FCseldorf&output=json&from=1&to=10
  • HttpContext.Current.Request.QueryString.ToString()q=D%ufffdsseldorf&output=json&from=1&to=10

这是为什么,我如何告诉 HttpContext 接受请求 header ,其中包括:

Content-Type=application/x-www-form-urlencoded;+charset=UTF-8

并使用 UTF-8 字符集解码 URL 的 QueryString

附录:正如答案所指出的,问题不在于解码,而在于编码;在 JavaScript 中使用 escape() 不会根据 UTF-8 转义,而使用 encodeURIComponent() 会。

最佳答案

我不知道你的服务器(IIS?)使用的默认字符编码是什么,或者它是否可以更改,但我可以告诉你一些可能有帮助的事情。

0xFC 是 ü 的 ISO-8859-1 编码。虽然 Unicode 代码点是 U+00FC,但当使用 UTF-8 编码时,这需要两个字节,并变为 0xC3 0xBC。

如果 UTF-8 解码器看到非法字节序列 0xFC,它会将其解码为 Unicode“替换字符”U+FFFD,并在它看到另一个有效字节序列的开头处拾取,在此案例's'。

你得到 %3f 的原因就是它 '?'是拉丁字符集中的“替换字符”,类似于Unicode字符集中的�。

我相信您看到的是客户端使用 ISO-8859-1 编码,但服务器使用 UTF-8 解码。一旦它到达服务器,您的数据就会损坏。我建议你修改客户端使用UTF-8编码;它应该请求 http://site/serviceproxy.ashx?q=D%C3%BCsseldorf

听起来您是从 JavaScript 构建这些 URL,因此您应该使用 encodeURIencodeURIComponent函数,而不是 escape .

关于asp.net - 在 .Net http 处理程序中编码 u 元音变音时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/319113/

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