Unicode StreamReader读取\u00fc,但邮递员读取OK

Unicode StreamReader读取\u00fc,但邮递员读取OK,unicode,character-encoding,postman,soapui,fallback,Unicode,Character Encoding,Postman,Soapui,Fallback,可能是重复的问题,但我找不到问题的答案。我有以下代码来调用web服务: var httpWebRequest = (HttpWebRequest)WebRequest.Create("http://172.21.122.1:5001/autocomplete"); httpWebRequest.ContentType = "application/json"; httpWebRequest.Method = "POST"; //t

可能是重复的问题,但我找不到问题的答案。我有以下代码来调用web服务:

        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\u015fterixim”“]”

当我使用Postman或SoapUI调用具有相同请求的相同服务时:{“message”:“mü”}, 回答看起来还行:{“文字”:[“穆泰里”,“穆泰里西姆”]}

奇怪的是:相同的代码可以用于许多其他服务。只有这个特定的服务没有正确编码响应。我们相信该服务存在编程错误,但我想知道的是Postman或SoapUI是如何处理的。他们的代码中应该有一个控件,以及响应是否包含“\uxxx”,然后邮递员或SoapUI再次对其进行解码

我已经检查了Postman和SoapUI中的所有请求/响应头,但运气不好。原因可能是什么


您必须确保您的请求编码正确: 将内容类型设置为:

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

我注意到你不是在看邮递员的尸体。。。?邮递员屏幕截图只显示了标题,但C#正试图读取正文。您的回复正文看起来也相当完整:它以
{“words”开头:["
,这是有效的JSON,很可能意味着字符编码很好,没有压缩,等等。字符串本身也可能很好:如果你用它们所代表的实际字符替换
\uxxx
,你会得到
müşeri
müşterisiyim
,Google Translate告诉我这是有效的TurkishHow请求对象看起来像吗?如果您是从外部某处加载“words”内容,则可能存在编码问题。我编辑了问题并添加了我在代码和邮递员中使用的请求/响应。将
Regex.Unescape(response)
甚至
response=Regex.Unescape(streamReader.ReadToEnd())
解决问题?我不认为这是正确的:正如在评论中所讨论的,响应看起来格式正确是的,响应格式正确,问题是它的编码错误。我不认为是这样的——你可以看到它是以有效的JSON开头的。如果编码错误,就不会发生这种情况。这不起作用:响应e看起来仍然一样:{“words”:[“m\u00fc\u015fteri”,“m\u00fc\u015fterisiyim”“])也可以尝试将StreamWriter编码设置为UTF-8。