在C#中将\ u0040转换为@

Bar*_*rka 4 .net c# unicode utf-8 streamreader

Facebook图形API将用户的电子邮件地址返回给我

foo\u0040bar.com.

在JSON对象中.我需要将其转换为

foo@bar.com.

.NET中必须有一个内置方法,可以将Unicode字符表达式(\ u1234)更改为实际的unicode符号.

你知道这是什么吗?

注意:我不希望使用JSON.NET或JavaScriptSerializer来解决性能问题.

我认为问题出在我的StreamReader中:

        requestUrl = "https://graph.facebook.com/me?access_token=" + accessToken;
        request = WebRequest.Create(requestUrl) as HttpWebRequest;
        try
        {
            using (HttpWebResponse response2 = request.GetResponse() as HttpWebResponse)
            {
                // Get the response stream  
                reader = new StreamReader(response2.GetResponseStream(),System.Text.Encoding.UTF8);
                string json = reader.ReadToEnd();
Run Code Online (Sandbox Code Playgroud)

我为StreamReader尝试了不同的编码,UTF8,UTF7,Unicode,......都没有用.

非常感谢!

感谢LB纠正我.问题不在StreamReader中.

Guf*_*ffa 10

是的,有一些内置的方法,但这将涉及使用编译器将字符串解析为代码...

使用简单的替换:

s = s.Replace(@"\u0040", "@");
Run Code Online (Sandbox Code Playgroud)

要获得更灵活的解决方案,您可以使用可以处理任何unicode字符的正则表达式:

s = Regex.Replace(s, @"\\u([\dA-Fa-f]{4})", v => ((char)Convert.ToInt32(v.Groups[1].Value, 16)).ToString());
Run Code Online (Sandbox Code Playgroud)


L.B*_*L.B 3

Json 响应不是使用某些编码转换为字符串的二进制数据。相反,它们是由您的浏览器或HttpWebResponse您的示例中正确解码的字符串。您需要对其进行第二次处理(正则表达式、反序列化器等)才能获取最终数据。

webClient.DownloadString("https://graph.facebook.com/HavelVaclav?access_token=????")看看你在没有任何编码的情况下得到了什么

{"id":"100000042150992",
    "name":"Havel V\u00e1clav",
    "first_name":"Havel",
    "last_name":"V\u00e1clav",
    "link":"http:\/\/www.facebook.com\/havel.vaclav",
    "username":"havel.vaclav",
    "gender":"male",
    "locale":"cs_CZ"
}
Run Code Online (Sandbox Code Playgroud)

您的编码会更改\/为吗/

所以,问题不在你的StreamReader