4

私は簡単なことをしようとしています-すべてのアルバムを入手してください。問題は、アルバム名が英語以外(ヘブライ語)であるということです。

アルバムを取得するコード:

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

そして、これは返されたアルバムの1つがどのように見えるかです:

{
     "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」プロパティにあります。ヘブライ文字の代わりに、これらのコードを取得します(これらのコードはゴミではなく、一貫性があります。各コードはおそらく1つのヘブライ文字を表しています)。問題は、これらのコードを英語以外の言語(私の場合はヘブライ語)に変換するにはどうすればよいかということです。あるいは、問題は、webClientオブジェクトを使用してアルバムを取得する方法にあります。たぶんwebclient.Encodingを変更しますか?

この問題を解決するにはどうすればよいですか?

前もって感謝します。

4

4 に答える 4

5

これがUnicodeがJSONcharで表される方法です(サイドバーの定義を参照)。これらは、4桁の16進数が文字のUnicodeコードポイントであるエスケープシーケンスです。使用できる16進数は4桁しかないため、JSONで表現できるのはBMPのUnicode文字のみであることに注意してください。

適切なJSONパーサーは、これらのUnicodeエスケープシーケンスを適切にエンコードされた文字に変換します。ただし、ターゲットのエンコードが最初に文字をサポートしている場合に限ります。

于 2010-09-27T19:06:27.397 に答える
1

Facebook Graph Apiでも同じ問題が発生し、Unicodeのルーマニア語文字をエスケープしました。私は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)とprobabyは、htmlで直接文字セットを宣言した場合にも機能します。

header('content-type:text/html;charset=utf-8');
于 2015-07-19T17:12:12.537 に答える
0

これらはUnicode文字コードです。\ uシーケンスは、次の4文字が実際にはUnicode文字番号を形成していることをパーサーに通知します。これらの文字がどのように見えるかはフォントによって異なります。誰かが正しいフォントを持っていない場合、それらは多くの四角いボックスとして表示される可能性があります。それは私が知っている限りですが、Unicodeは複雑です。

于 2010-09-27T18:21:46.473 に答える
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));
于 2020-12-23T21:52:54.640 に答える