0%

字符编码笔记(四)

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不需要这个标记。

参考资料