此案例只展示常用汉字转换,特殊文字请参考《字符的Unicode表示法》,由于ES5中JavaScript允许采用\uxxxxx形式表示一个字符,其中xxxx表示字符的码点,但是,这种表示法只限于\u0000-\uFFFF之间的字符,超出这个范围的字符,必须用2个双字节的形式表达。JavaScript内部,字符以UTF-16的格式储存,每个字符固定为2字节,对于那些需要4个字节储存的字符(Unicode码点大于0xFFFF的字符),JavaScript会认为它们是2个字符。
例如:
var s = '吉'; s.length; //2 s.charAt(0); // ' ' s.charAt(1); // ' ' s.charCodeAt(0); // 55362 s.charCodeAt(1); // 57271
上面的代码中,汉字“吉”的码点是0x20bb7,UTF-16编码为0xD842 0xDFB7(十进制为55362 57271),需要4个字节储存,对于这种4个字节的字符,JavaScript不能正确处理。
以上就是解释为什么此案例有时候会解析不出正确的拼音。