javascript语言中的字符编码
发布网友
发布时间:2024-08-26 11:26
我来回答
共1个回答
热心网友
时间:2024-08-27 20:54
JavaScript自1995年诞生以来,就采用了Unicode作为其编码方式。这一点在ECMAScript3和ECMAScript5标准中都有明确规定,要求JavaScript必须支持Unicode的后续版本。
JavaScript采用UTF-16编码方式,这意味着所有的JavaScript代码在计算机中都是以UTF-16的2或4字节方式存储。其中,2字节用于编码0x0 - 0xFFFF的码段,编码后的数值与Unicode码点一致;4字节(两个双字节)用于编码0x10000 - 0x10FFFF的码点,这些码点被称为代理对。
代理对是通过一系列规则将超出BMP平面的码点转换成两个属于BMP平面的码点。例如,0x10437码点会被编码成D801 DC37。其中,U+D800到U+DFFF码段用于高位代理和低位代理,它们之间间隔1024个码点,刚好各自能够满足前后10位。
JavaScript的String对象提供了Unicode码点和字符串的转换方法。String.fromCharCode()方法可以将Unicode码点转换成字符串,而charCodeAt()方法则可以将字符串指定位置的字符转换成Unicode码点。
JavaScript引擎将所有源码视为一连串的UTF16码元,因此字符串的length指的是码元的个数,而不是字符个数。对于4个字节UTF-16编码的字符串,其length为2。对于中文等BMP平面内的字符,其length始终为1。如果需要获取正确的length值,可以使用Array.from(str).length或识别两个相邻的码元是否形成代理对的关系。