BMP będąc Basic Multilingual Planeciągi JavaScript poza BMP
Według javascript: te dobre części:
JavaScript został zbudowany w czasie, gdy Unicode był zbiorem 16-bitowy, więc wszystko znaki w kodzie JavaScript mają szerokość 16 bitów.
To prowadzi mnie do przekonania, że JavaScript używa UCS-2 (nie UTF-16!) I może obsługiwać tylko znaki do U + FFFF.
Dalsze badanie potwierdza:
> String.fromCharCode(0x20001);
Sposób fromCharCode
wydaje się używać tylko najniższe 16 bitów po powrocie znak Unicode. Próbując uzyskać U + 20001 (CJK unified ideograph 20001) zamiast tego zwraca U + 0001.
Pytanie: czy obsługa znaków post-BMP w JavaScript jest w ogóle możliwa?
2011-07-31: przesuń dwanaście z Unicode Shootout: The Good, The Bad, & The (przeważnie) brzydki obejmuje zagadnienia związane z tym całkiem dobrze:
Jeśli korzystano z UTF-16, można oczekiwać, że znaki spoza podstawowej płaszczyzny wielojęzycznej będą obsługiwane przy użyciu zastępczych par. Dlaczego miałbyś oczekiwać, że zaakceptuje 32-bitową postać? –
Wielkie dzięki za to, nigdy nie myślałem o tym w ten sposób. –
@MichaelAaronSafyan: Ponieważ JavaScript nie ma niczego przypominającego typ "char", a 'String.fromCharCode()' zwraca ciąg, wydaje się sprawiedliwe oczekiwanie, że zwróci ciąg zawierający obie jednostki kodu, które tworzą znak. Wierzę, że będzie istnieć 'String.fromCodePoint()' dodana do przyszłego standardu JavaScript, aby to dokładnie zrobić. – hippietrail