Facebook Graph API - не английские названия альбомов - PullRequest
4 голосов
/ 27 сентября 2010

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

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

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

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

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

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

Ответы [ 3 ]

5 голосов
/ 27 сентября 2010

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

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

1 голос
/ 19 июля 2015

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

Метод 1 (PHP):

$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 (PHP) и, вероятно, он работает, если вы объявитекодировка прямо в html:

header('content-type:text/html;charset=utf-8');
0 голосов
/ 27 сентября 2010

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

...