Facebook 图形 API - 非英文相册名称

4
我将尝试做一件简单的事情 - 获取我所有的相册。问题在于相册名称是非英语的(它们是希伯来语)。
检索相册的代码:
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.Encoding解决? 我该怎么做才能解决这个问题? 提前感谢。
4个回答

5
这就是Unicode在JSON中的表示方式(请参见侧边栏中char的定义),它们是转义序列,其中四个十六进制数字是字符的Unicode代码点。请注意,由于只有四个十六进制数字可用,因此在JSON中只能表示BMP中的Unicode字符。
任何好的JSON解析器都会将这些Unicode转义序列转换为适当编码的字符,前提是目标编码首先支持该字符。

1
我曾遇到过使用Facebook Graph Api时出现转义Unicode罗马尼亚字符的问题。我使用了PHP,但你可能可以将正则表达式方法翻译成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
这些是Unicode字符代码。\u序列告诉解析器接下来的4个字符实际上组成了一个Unicode字符编号。这些字符的外观取决于您的字体,如果某人没有正确的字体,它们可能只会显示为许多方框。 这就是我所知道的关于Unicode的大部分内容,它很复杂。

0

对于希伯来文本,以下 PHP 代码可以解决问题:

    $str = '\u05ea\u05e2\u05e8\u05d5\u05db\u05ea \u05d2\u05de\u05e8 \u05e9\u05e0\u05d4 \u05d0';

    function decode_encoded_utf8($string){
        return preg_replace_callback('#\\\\u([0-9a-f]{4})#ism', function($matches) { return mb_convert_encoding(pack("H*", $matches[1]), "UTF-8", "UCS-2BE"); }, $string);
    }
    echo decode_encoded_utf8($str); // will show (תערוכת גמר שנה א) text

对于阿拉伯文本,请使用此代码:

$str = '\u00d8\u00ae\u00d9\u0084\u00d8\u00b5';

function decode_encoded_utf8($string){
    return preg_replace_callback('#\\\\u([0-9a-f]{4})#ism', function($matches) { return mb_convert_encoding(pack("H*", $matches[1]), "UTF-8", "UCS-2BE"); }, $string);
}
echo iconv("UTF-8", "ISO-8859-1//TRANSLIT", decode_encoded_utf8($str));

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接