JavaScript语言中的字符编码
JavaScript采用Unicode字符集,但是采用UCS-2编码,所以对于基本平面之外的字符处理都会产生问题。
ES6的补救
识别基本平面外的码位
例如:let str2='\u{20BB7}'
正确遍历字符串
for of
支持基本平面外的字符,其中用到了字符串的这个方法:let iterator=str[Symbol.iterator]()
获取字符串的真正长度
Array.from(str)
增加了字符串方法
- String.fromCodePoint():从码位获得字符
- codePointAt():从字符串指定位置获得相应码位
正则表达式
- 添加
u
匹配模式,支持4字节码单元 - 使用
u{nnnn}
格式,能够应对所有unicode字符
Unicode正规化
unicode对于一些符号存在不同的标记方式,主要是指某些语言的声调。
同一个符号的标记方式不同造成不被认为是相同符号。所以添加了normalize方法可以把不同的标记方法统一。
补充知识
不换行空格
(英语:no-break space,NBSP)
- 遇到换行的情况,这种空格连接的前后两部分会被当作整体处理;
- 这种空格不会被合并;
- ASCII字符中不存在此字符;
- html中的
的效果就是这种空格;
字节序(BOM)
字节序是Unicode规定的,在文件头部说明文件字节顺序的标记。
这个问题只存在读取文件时。
采用的标记符号是Unicode码位在FEFF
的字符。
通过在文件头部写入这个标记,说明文件中字节的顺序。
两种字节序
- 大端:高位字节在前,字节序标记为
FEFF
或者0000 FEFF
- 小端:低位字节在前,字节序标记为
FFFE
或者FFFE 0000
理论上UTF-8不需要这个标记。