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!