在C#中将\ u0040转换为@

时间:2011-11-30 18:06:15

标签: c# unicode utf-8 streamreader .net

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

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

非常感谢!

感谢L.B纠正我。问题不在StreamReader中。

2 个答案:

答案 0 :(得分:10)

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

使用简单的替换:

s = s.Replace(@"\u0040", "@");

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

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

答案 1 :(得分:2)

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"
}

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

因此,问题不在您的StreamReader