首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Javascript: unicode字符到基于字节的十六进制转义序列(不是代理)

Javascript: unicode字符到基于字节的十六进制转义序列(不是代理)
EN

Stack Overflow用户
提问于 2015-08-01 12:44:12
回答 2查看 1.3K关注 0票数 5

在javascript中,我试图使unicode成为与C兼容的基于字节的十六进制转义序列:

即。

变成:\xF0\x9F\x98\x84 (正确)

不是javascript代理,不是\uD83D\uDE04 (错误)

我无法计算出C想要的四个字节与javascript使用的两个代理之间的数学关系。我怀疑这个算法比我微弱的尝试要复杂得多。

谢谢你的建议。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-08-01 13:20:08

encodeURIComponent做了以下工作:

代码语言:javascript
复制
var input = "\uD83D\uDE04";
var result = encodeURIComponent(input).replace(/%/g, "\\x"); // \xF0\x9F\x98\x84

Upd:实际上,C字符串可以包含数字和字母,而不需要转义,但是如果您真的需要转义它们:

代码语言:javascript
复制
function escape(s, escapeEverything) {
    if (escapeEverything) {
        s = s.replace(/[\x10-\x7f]/g, function (s) {
            return "-x" + s.charCodeAt(0).toString(16).toUpperCase();
        });
    }
    s = encodeURIComponent(s).replace(/%/g, "\\x");
    if (escapeEverything) {
        s = s.replace(/\-/g, "\\");
    }
    return s;
}
票数 1
EN

Stack Overflow用户

发布于 2015-08-01 13:09:14

在这里找到了一个解决方案:http://jonisalonen.com/2012/from-utf-16-to-utf-8-in-javascript/

我就不会想出那个数学了,哇。

有点儿缩小

代码语言:javascript
复制
function UTF8seq(s) {
        var i,c,u=[];
        for (i=0; i < s.length; i++) {
            c = s.charCodeAt(i);
                if (c < 0x80) { u.push(c); }
                else if (c < 0x800) { u.push(0xc0 | (c >> 6), 0x80 | (c & 0x3f)); }
                else if (c < 0xd800 || c >= 0xe000) { u.push(0xe0 | (c >> 12),  0x80 | ((c>>6) & 0x3f), 0x80 | (c & 0x3f));  }
                else {  i++;  c = 0x10000 + (((c & 0x3ff)<<10) | (s.charCodeAt(i) & 0x3ff));
                        u.push(0xf0 | (c >>18),  0x80 | ((c>>12) & 0x3f),  0x80 | ((c>>6) & 0x3f), 0x80 | (c & 0x3f)); }        
        }
        for (i=0; i < u.length; i++) { u[i]=u[i].toString(16); }
        return '\\x'+u.join('\\x');
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31761980

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档