在javascript中,我试图使unicode成为与C兼容的基于字节的十六进制转义序列:
即。
变成:\xF0\x9F\x98\x84 (正确)
不是javascript代理,不是\uD83D\uDE04 (错误)
我无法计算出C想要的四个字节与javascript使用的两个代理之间的数学关系。我怀疑这个算法比我微弱的尝试要复杂得多。
谢谢你的建议。
发布于 2015-08-01 13:20:08
encodeURIComponent做了以下工作:
var input = "\uD83D\uDE04";
var result = encodeURIComponent(input).replace(/%/g, "\\x"); // \xF0\x9F\x98\x84Upd:实际上,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;
}https://stackoverflow.com/questions/31761980
复制相似问题