StreamReader 读取 \u00fc 但 Postman 读取正常
StreamReader reads \u00fc but Postman reads OK
可能是重复的问题,但我找不到问题的答案。我有调用网络服务的代码:
var httpWebRequest = (HttpWebRequest)WebRequest.Create("http://172.21.122.1:5001/autocomplete");
httpWebRequest.ContentType = "application/json";
httpWebRequest.Method = "POST";
//tried this too: httpWebRequest.Accept = "gzip, deflate";
using (var streamWriter = new StreamWriter(httpWebRequest.GetRequestStream()))
{
streamWriter.Write("{ \"message\" : \"mü\" }");
streamWriter.Flush();
streamWriter.Close();
}
var httpResponse = (HttpWebResponse)httpWebRequest.GetResponse();
response = "";
using (var streamReader = new StreamReader(httpResponse.GetResponseStream()))
{
response = streamReader.ReadToEnd();
}
但无论我尝试使用 StreamReader() c'tor 进行何种编码,我都会得到以下响应或更糟的响应:{"words":["m\u00fc\u015fteri","m\u00fc\u015fterisiyim""]}
当我使用 Postman 或 SoapUI 以相同的请求调用相同的服务时:{"message": "mü"},
响应看起来不错:{"words": ["müşteri","müşterisiyim"]}
奇怪的是:相同的代码可以与许多其他服务一起使用。只有这个特定的服务没有正确编码响应。我们认为该服务存在编程错误,但我想知道 Postman 或 SoapUI 是如何处理这个问题的。他们的代码中应该有一个控件,如果响应包含“\uxxxx”,那么 Postman 或 SoapUI 会再次对其进行解码。
我已经检查了 Postman 和 SoapUI 中的所有请求/响应 headers,但没有成功。可能是什么原因?
您必须确保您的请求编码正确:
将内容类型设置为:
httpWebRequest.ContentType = "application/json;charset=UTF-8";
检查请求正文是否也是 UTF-8 编码的。将 StreamWriter 编码也设置为 UTF-8:
...
using (var streamWriter = new StreamWriter(httpWebRequest.GetRequestStream(), Encoding.UTF8))
...
如果您从其他来源获取请求内容,请确保也使用 UTF-8 编码阅读它。
Regex.Unescape(回复)非常有效,谢谢 JosefZ!
可能是重复的问题,但我找不到问题的答案。我有调用网络服务的代码:
var httpWebRequest = (HttpWebRequest)WebRequest.Create("http://172.21.122.1:5001/autocomplete");
httpWebRequest.ContentType = "application/json";
httpWebRequest.Method = "POST";
//tried this too: httpWebRequest.Accept = "gzip, deflate";
using (var streamWriter = new StreamWriter(httpWebRequest.GetRequestStream()))
{
streamWriter.Write("{ \"message\" : \"mü\" }");
streamWriter.Flush();
streamWriter.Close();
}
var httpResponse = (HttpWebResponse)httpWebRequest.GetResponse();
response = "";
using (var streamReader = new StreamReader(httpResponse.GetResponseStream()))
{
response = streamReader.ReadToEnd();
}
但无论我尝试使用 StreamReader() c'tor 进行何种编码,我都会得到以下响应或更糟的响应:{"words":["m\u00fc\u015fteri","m\u00fc\u015fterisiyim""]}
当我使用 Postman 或 SoapUI 以相同的请求调用相同的服务时:{"message": "mü"}, 响应看起来不错:{"words": ["müşteri","müşterisiyim"]}
奇怪的是:相同的代码可以与许多其他服务一起使用。只有这个特定的服务没有正确编码响应。我们认为该服务存在编程错误,但我想知道 Postman 或 SoapUI 是如何处理这个问题的。他们的代码中应该有一个控件,如果响应包含“\uxxxx”,那么 Postman 或 SoapUI 会再次对其进行解码。
我已经检查了 Postman 和 SoapUI 中的所有请求/响应 headers,但没有成功。可能是什么原因?
您必须确保您的请求编码正确: 将内容类型设置为:
httpWebRequest.ContentType = "application/json;charset=UTF-8";
检查请求正文是否也是 UTF-8 编码的。将 StreamWriter 编码也设置为 UTF-8:
...
using (var streamWriter = new StreamWriter(httpWebRequest.GetRequestStream(), Encoding.UTF8))
...
如果您从其他来源获取请求内容,请确保也使用 UTF-8 编码阅读它。
Regex.Unescape(回复)非常有效,谢谢 JosefZ!