2010-09-27 2 views
4

Я пытаюсь сделать простую вещь - получить все мои альбомы. проблема в том, что имена альбомов не являются английскими (они на иврите).Facebook Graph API - не английские названия альбомов

код, который извлекает альбомы:

string query = "https://graph.facebook.com/me/albums?access_token=..."; 
string result = webClient.DownloadString(query); 

И это, как один из возвращенных альбомов выглядит следующим образом:

{ 
    "id": "410329886431", 
    "from": { 
     "name": "Noam Levinson", 
     "id": "500786431" 
    }, 
    "name": "\u05ea\u05e2\u05e8\u05d5\u05db\u05ea \u05d2\u05de\u05e8 \u05e9\u05e0\u05d4 \u05d0", 
    "location": "\u05e9\u05e0\u05e7\u05e8", 
    "link": "http://www.facebook.com/album.php?aid=193564&id=500786431", 
    "count": 27, 
    "type": "normal", 
    "created_time": "2010-07-18T06:20:27+0000", 
    "updated_time": "2010-07-18T09:29:34+0000" 
    }, 

Как вы можете видеть, что проблема находится в собственности «имя» , Вместо букв на иврите Я получаю эти коды (эти коды не мусор, они согласованы - каждый код, вероятно, представляет собой одну еврейскую букву). Вопрос в том, как я могу преобразовать эти коды на неанглийский язык (в моем случае, на иврит). Или, может быть, проблема заключается в том, как я извлекаю альбомы с помощью объекта webClient. возможно, измените webclient.Encoding каким-то образом?

что делать, чтобы решить эту проблему?

Заранее спасибо.

ответ

4

Вот как Юникод представлен в JSON (см. Определение char5 на боковой панели). Это escape-последовательности, в которых четыре шестнадцатеричных цифры являются кодовой точкой Юникода символа. Обратите внимание, что, поскольку доступно только четыре шестизначных числа, в JSON могут быть представлены только символы Unicode из BMP.

Любой достойный парсер JSON преобразует эти escape-последовательности Unicode в правильно закодированные символы для вас - при условии, что целевая кодировка поддерживает символ в первую очередь.

0

Это коды символов Юникода. Последовательность \ u сообщает парсеру, что следующие 4 символа фактически образуют номер символа Юникода. То, как выглядят эти персонажи, будет зависеть от вашего шрифта, если у кого-то нет правильного шрифта, он может просто отображаться как много квадратиков. Это примерно столько, сколько я знаю, Unicode сложный.

1

У меня была такая же проблема с Facebook Graph Api, и у вас были unicode румынские символы. Я использовал PHP, но вы, вероятно, можете перевести метод regexp в javascript.

Метод 1 (РНР):

$str = "\u05ea\u05e2\u05e8\u05d5\u05db\u05ea"; 
function esc_unicode2html($string) { 
    return preg_replace('/\\\\u([0-9a-z]{4})/', '&#x$1;', $string); 
} 
echo esc_unicode2html($str); 

Способ 2 (РНР) и probaby он работает также, если и объявить набор символов непосредственно в HTML:

header('content-type:text/html;charset=utf-8');