如何从Unicode十六进制值获取实际字符

时间:2019-05-18 22:27:54

标签: javascript unicode

我已经尝试过了,但是不确定是否正确:

> parseInt('E01ED', 16).toString(10)
'917997'
> String.fromCharCode(917997)
'ǭ'

here看起来不一样。

我从这里得到了十六进制值:

E01ED;VARIATION SELECTOR-254;Mn;0;NSM;;;;;N;;;;;

另一个可能是:

005B;LEFT SQUARE BRACKET;Ps;0;ON;;;;;Y;OPENING SQUARE BRACKET;;;;

使用:

> parseInt('005B', 16).toString(10)
'91'
> String.fromCharCode(91)
'['

这看起来是正确的,所以主要是仔细检查。

1 个答案:

答案 0 :(得分:1)

String.fromCharCode使用UTF-16代码单元,而不是代码点-可以说是历史错误。请改用String.fromCodePoint

console.log(String.fromCharCode(0xe01ed));
console.log(String.fromCodePoint(0xe01ed));

如果您需要对较旧环境的支持,则必须自己进行翻译(或使用软件包或类似工具):

function fromCodePoint(codePoint) {
    if (codePoint < 0x10000) {
        return String.fromCharCode(codePoint);
    }

    codePoint -= 0x10000;

    var leadSurrogate = (codePoint >>> 10) + 0xd800;
    var trailSurrogate = (codePoint & 0x3ff) + 0xdc00;

    return String.fromCharCode(leadSurrogate, trailSurrogate);
}