gpt4 book ai didi

c# - HTTP Get 请求中的 Unicode 字符

转载 作者:行者123 更新时间:2023-11-30 17:14:21 24 4
gpt4 key购买 nike

我有一个 C# REST Web 服务公开了以下方法:

[OperationContract]
[WebGet
(
BodyStyle = WebMessageBodyStyle.Bare,
RequestFormat = WebMessageFormat.Xml,
ResponseFormat = WebMessageFormat.Xml,
UriTemplate = "/Files?id={ID}"
)
]
Stream GetFilesForID(string ID);

此方法根据用户指定的 ID 从数据库中获取信息。此 ID 中可以包含中文字符。

我对该方法的实现:

public Stream GetFilesForID(string ID)
{
ID = Encoding.UTF8.GetString(Encoding.UTF8.GetBytes(ID));

// and connect to database and
// stream back the list.
}

“ID”里面还是没有汉字。它看起来像:ã³ãã«-太é

我有客户端代码,它是用 C++ 编写的,并使用 winHTTP 库调用此 REST Web 服务方法。我也使用 fiddler 对此进行了测试,但我得到了相同的结果,即汉字显示为奇怪的字符。

如果我有一个“POST”方法,请求正文具有 unicode 字符,我的 webservice 方法获取请求正文没有任何问题。我什至不需要做这样的事情:Encoding.UTF8.GetString(Encoding.UTF8.GetBytes(requestBody));

我在这里错过了什么?在发送 HTTP GET 请求之前我还需要做其他事情吗?

最佳答案

C# 可以处理的所有字符都是 Unicode 字符。

只有一些字符在 URI 中未转义是有效的。 IRI 中允许更多,但我们需要一个 URI。

在查询部分,您应该始终使用Uri.EscapeDataString。它不仅会处理中文:

Uri.EscapeDataString("孫子兵法 孫武")
//returns %E5%AD%AB%E5%AD%90%E5%85%B5%E6%B3%95%20%E5%AD%AB%E6%AD%A6

但英语和其他语言也有问题:

Uri.EscapeDataString("A naïve approach = trouble waiting + bugs & complaints!")
//A%20na%C3%AFve%20approach%20%3D%20trouble%20waiting%20%2B%20bugs%20%26%20complaints!

顺便说一句,ID = Encoding.UTF8.GetString(Encoding.UTF8.GetBytes(ID)) 等同于 ID = ID,因为它完全撤消了它首先执行的操作做。您看到的是 mojibake 而不是源中文字符串,这是后来发生的其他事情。

关于c# - HTTP Get 请求中的 Unicode 字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8828804/

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