Search code examples
unicodecharacter-encodingpostmansoapuifallback

StreamReader reads \u00fc but Postman reads OK


Probably duplicate question but I couldn't find an answer for my problem. I have this code to call a web service:

        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();
        }

But no matter what Encoding I tried with StreamReader() c'tor, I get this response or worse: {"words":["m\u00fc\u015fteri","m\u00fc\u015fterisiyim""]}

When I use Postman or SoapUI to call the same service with the same request: {"message": "mü"}, response looks ok: {"words": ["müşteri","müşterisiyim"]}

Strange thing is: The same code works OK with many other services. It is only this specific service that the reponse is not correctly encoded. We believe there is a programming error with the service, but what I wonder is how Postman or SoapUI handles this. There should be a control in their code and if the response contains "\uxxxx", then Postman or SoapUI decodes it again.

I've checked all request / response headers in Postman and SoapUI with no luck. What can be the reason?

Postman screen SoapUI screen


Solution

  • Regex.Unescape(response) worked like a charm, thanks JosefZ!