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

ck_*_*ck_ 5 javascript unicode hex utf-8 utf-16

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

IE。

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

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

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

感谢您的任何提示。

Art*_*tem 1

encodeURIComponent执行此工作:

var input = "\uD83D\uDE04";
var result = encodeURIComponent(input).replace(/%/g, "\\x"); // \xF0\x9F\x98\x84
Run Code Online (Sandbox Code Playgroud)

更新:实际上,C 字符串可以包含数字和字母而无需转义,但如果你确实需要转义它们:

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;
}
Run Code Online (Sandbox Code Playgroud)