javascript - क्या स्ट्रिंग को "उच्च" यूनिकोड वर्ण युक्त एक सरणी में कनवर्ट करना संभव है, जो कि यूटीएफ-32("असली") कोड से व्युत्पन्न डीसी मानों से बना है?



html utf-8 (1)

कृपया, एक (सैद्धांतिक रूप से संभव) स्ट्रिंग पर चल रहे इस स्क्रिप्ट को देखें:

<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<script src="jquery.js"></script>
<script>
    $(function () {
        $("#click").click(function () {
            var txt = $('#high-unicode').text();
            var codes = '';
            for (var i = 0; i < txt.length; i++) {
                if (i > 0) codes += ',';
                codes += txt.charCodeAt(i);
            }
            alert(codes);
        });
    });
</script>
</head>
<body>
<span id="click">click</span><br />
<span id="high-unicode">&#x1D465;<!-- mathematical italic small x -->&#xF31E0;<!-- some char from Supplementary Private Use Area-A -->A<!-- char A -->&#x108171;<!-- some char from Supplementary Private Use Area-B --></span>
</body>
</html>

"55349,56421,56204,56800,65,56288,56689" के बजाय, क्या "119 9 9, 99 5808,65,1081713" प्राप्त करना संभव है? मैंने अधिक- utf-32-aware-javascript-string और Q पढ़ा है : UTF-16 से चरित्र कोड में कनवर्ट करने के लिए एल्गोरिथ्म क्या है? + प्रश्न: ऐसा करने के लिए कोई आसान तरीका नहीं है? unicode.org/faq/utf_bom से , लेकिन मुझे यकीन नहीं है कि इस जानकारी का उपयोग कैसे करें


ऐसा लगता है कि आपको सरोगेट जोड़े मैन्युअल रूप से डिकोड करना होगा। उदाहरण के लिए:

function decodeUnicode(str) {
    var r = [], i = 0;
    while(i < str.length) {
        var chr = str.charCodeAt(i++);
        if(chr >= 0xD800 && chr <= 0xDBFF) {
            // surrogate pair
            var low = str.charCodeAt(i++);
            r.push(0x10000 + ((chr - 0xD800) << 10) | (low - 0xDC00));
        } else {
            // ordinary character
            r.push(chr);
        }
    }
    return r;
}

पूरा कोड: http://jsfiddle.net/twQWU/





utf-32