charCodeAt и fromCharCode не возвращают один и тот же символ
Теоретически, независимо от того, что является вводом, вывод должен быть неизменным:
String.fromCharCode("a".charCodeAt(0)); //"a"
Это имеет смысл, потому что я просто пытаюсь получить код символа персонажа, а затем приводить его обратно к персонажу.
Однако, когда я пытаюсь с этим персонажем, он ломается:
//"": 55356
String.fromCharCode("".charCodeAt(0)); //"�" (65533)
(Обратите внимание, что я выделил строку и вставил ее в следующую строку. Она изменилась на �
само собой по какой-то причине.)
Почему это происходит и как я могу это исправить?
Я заметил, что есть новый метод в ES6, String.fromCodePoint()
но он не поддерживается всеми браузерами, кроме Firefox.
1 ответ
Это не меняет.
> String.fromCharCode("".charCodeAt(0)).charCodeAt(0)
55356
И вы можете проверить все по:
for (var i = 0; i <= 65535; i++) {
if (String.fromCharCode(i).charCodeAt(0) !== i) {
console.log('error', i, String.fromCharCode(i));
}
}
Почему ты видел �
это потому что �
(65533) используется для замены символа, значение которого неизвестно или непредставимо в юникоде.
Это называется ЗАМЕНА ХАРАКТЕР.