1. 字符表示法
JavaScript 中 string 类型用于表示文本数据,是一组16位的无符号整数值(UCS-2编码)
// unicode码点在0-FF范围的字符:
var char = 'a' // 字面量
var char = '\141' // unicode 码 八进制 (三位八进制数)
var char = '\x61' // unicode 码 十六进制 (两位十六进制数)
var char = '\u0061' // unicode 码 十六进制(四位十六进制数)
// unicode码点大于FFFF的字符
var char = ''
var char = '\u{20BB7}' // unicode codepoint
var char = '\uD842\uDFB7' // UTF-16码元(代理对)
// 转义字符
var char = '\n'
var char = '\x0a'
var char = '\012'
2. Unicode
unicode包含1,112,064个码点/码位(code point/code position),编码范围是0x0000 到 0x10FFFF
在表示一个Unicode的字符时,通常会用“U+”然后紧接着一组十六进制的数字来表示这一个字符,比如 a
的码位是97,写作 U+0061
。
一个字符的Unicode编码是确定的,但实际使用还要确定编码的实现方式(Unicode Transformation Format,简称为UTF)。UTF-8、UTF-16、UTF-32都是将码点值转换为程序数据的实现方案。
3. UTF-16
在Unicode基本多文种平面定义的字符一律使用2字节储存。而在辅助平面定义的字符,会以代理对(surrogate pair)的形式,以两个2字节的值来储存。
从U+D800到U+DFFF是代理区,D800-DBFF作为UTF-16的高半区(High-half zone of UTF-16),DC00-DFFF作为UTF-16的低半区(Low-half zone of UTF-16)
所以,当我们遇到两个字节,发现它的码点在U+D800到U+DBFF之间,就可以断定,紧跟在后面的两个字节的码点,应该在U+DC00到U+DFFF之间,这四个字节必须放在一起解读。
补充阅读
https://www.cnblogs.com/benbenalin/p/6921553.html
http://www.ruanyifeng.com/blog/2014/12/unicode.html