преобразование \ u0040 в @ в C # - PullRequest
4 голосов
/ 30 ноября 2011

API графа Facebook возвращает мне адрес электронной почты пользователя как

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, ... никто не работал.

Большое спасибо!

Спасибо LB за поправку.Проблема была не в StreamReader.

Ответы [ 2 ]

10 голосов
/ 30 ноября 2011

Да, для этого есть какой-то встроенный метод, но для этого нужно что-то вроде использования компилятора для разбора строки как кода ...

Используйте простую замену:

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

Для более гибкого решения вы можете использовать регулярное выражение, которое может обрабатывать любой символ Юникода:

s = Regex.Replace(s, @"\\u([\dA-Fa-f]{4})", v => ((char)Convert.ToInt32(v.Groups[1].Value, 16)).ToString());
2 голосов
/ 30 ноября 2011

Ответы 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...