Как получить реальный символ из шестнадцатеричного значения Юникода - PullRequest
1 голос
/ 19 мая 2019

Я пробовал это, но не уверен, что это правильно:

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

Не выглядит так же, как здесь .

Я получил это шестнадцатеричное значение изздесь:

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 Ответ

1 голос
/ 19 мая 2019

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);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...