gpt4 book ai didi

c# - URL 编码问题 - HttpWebRequest 不起作用,Firefox 可以

转载 作者:行者123 更新时间:2023-11-30 22:48:21 25 4
gpt4 key购买 nike

我正在尝试调用 lims 系统(基本上是化学实验室数据库 + 接口(interface))提供的休息网络服务。在出现一些 > ascii 字符(特别是带有抑扬符、变音符等的字符)之前,它工作得很好

当调用传递值 àèïõû 的网络服务时,我有以下参数:

&componentValue=àèïõû

HttpWebRequest,没有任何预转义或使用 Uri.EscapeDataString() 调用值给出:

à èïõû

Firefox,与传递给 HttpWebRequest 的网站相同,给出了正确的值:

àèïõû

现在是转义本身:Uri.EscapeDataString() 似乎将“àèïõû”转义为:

%C3%A0%C3%A8%C3%AF%C3%B5%C3%BB

Firefox 将“àèïõû”转义为:

%E0%E8%EF%F5%FB

由于后者有效,我当然更愿意使用它作为我的转义方法,但我真的不知道从哪里开始。我发现了很多关于处理响应数据编码的不同方法的信息,但没有找到关于请求的信息。

最佳答案

来自 MSDN :

Uri.EscapeDataString Method

[...] All Unicode characters are converted to UTF-8 format before being escaped.

所以您看到的是 àèïõû 的 UTF-8 编码版本。

不同于Uri.EscapeDataString , HttpUtility.UrlEncode允许您明确指定编码:

HttpUtility.UrlEncode("àèïõû", Encoding.GetEncoding("latin1"));

或者,您可以编写自己的版本;例如:

string.Concat(Encoding
.GetEncoding("latin1")
.GetBytes("àèïõû")
.Select(x => "%" + x.ToString("x2"))
.ToArray());

两者的结果都是 "%e0%e8%ef%f5%fb"

更好的解决方案可能是在网络服务中接受 UTF-8 编码的查询字符串。

关于c# - URL 编码问题 - HttpWebRequest 不起作用,Firefox 可以,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1738711/

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