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中。
答案 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
。