Если вы попытаетесь преобразовать символ Unicode из BMP (базовая многоязычная плоскость) указанными выше способами - вас ждет неприятный сюрприз.Символы из BMP кодируются в виде нескольких значений UTF16
, например:
"?".length
= 2 (одна часть для сережки, одна часть для основания замка :))
, поэтому "?".charCodeAt(0)
будетдаст вам 55357
, что составляет «половину» от числа, в то время как "?".charCodeAt(1)
даст вам 56594
, что является другой половиной.
Чтобы получить коды символов для этих значений, вы можете использовать следующее расширение строкиФункция
String.prototype.charCodeUTF32 = function(){
return ((((this.charCodeAt(0)-0xD800)*0x400) + (this.charCodeAt(1)-0xDC00) + 0x10000));
};
Вы также можете использовать ее следующим образом
"&#x"+("?".charCodeUTF32()).toString(16)+";"
, чтобы получить HTML-шестнадцатеричные коды.
Надеюсь, это сэкономит вам время.