ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

javascript – 是否可以将包含“高”unicode字符的字符串转换为由utf-32(“真实”)代码派生的dec值组成的数组?

2019-05-29 18:23:55  阅读:230  来源: 互联网

标签:javascript utf-8 character-encoding html utf-32


请查看在(理论上可能的)字符串上运行的脚本:

<!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”,是否有可能得到“119909,995808,65,1081713”?我读过more-utf-32-aware-javascript-string和Q:从UTF-16转换为字符代码的算法是什么?问:有没有更简单的方法来做到这一点?从unicode.org/faq/utf_bom,但我不知道如何使用此信息.

解决方法:

看起来您必须手动解码surrogate pairs.例如:

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/

标签:javascript,utf-8,character-encoding,html,utf-32
来源: https://codeday.me/bug/20190529/1179729.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有