一,什么是Unicode
编码?
因为计算机只能处理数字,如果要处理文本,就必须先把文本转换为数字才能处理。
最早的计算机在设计时采用8个比特(bit
)作为一个字节(byte
),所以,一个字节能表示的最大的整数就是255(二进制11111111=十进制255),
0 - 255被用来表示大小写英文字母、数字和一些符号,这个编码表被称为ASCII
编码
如果要表示中文,显然一个字节是不够的,至少需要两个字节,而且还不能和ASCII编码冲突,所以,中国制定了GB2312
编码,用来把中文编进去。类似的,日文和韩文等其他语言也有这个问题。
为了统一所有文字的编码,Unicode
应运而生。Unicode
把所有语言都统一到一套编码里,这样就不会再有乱码问题了。
Unicode
通常用两个字节表示一个字符,原有的英文编码从单字节变成双字节,只需要把高字节全部填为0就可以。
二,字符的Unicode
码的表示形式
1.在js
中字符不仅能用普通的表示,还可以用Unicode
编码表示
ex: 'a' = \u0061 '
(数值使用的是十六进制)
2.在ES5
中,当Unicode
编码大于两个字节(0xffff)时
“𠀇”:’\u20007’ // 口7 (编译器会将前面两个字节作为一个字符,后面7作为新的字符)
所以在es6中使用大括号{}的解决方法
\u{20007}
// “𠀇”
三,es5
中字符操作方法:
charAt()
方法可返回指定位置的字符。
charCodeAt()
方法返回对应字符的码值
String.fromCharCode()
返回对应码值的字符
{
let str='hello world’;
str.charAt(0) //'h'
str.charCodeAt(0) // 104
String.fromCharCode('104') //h
}
上述方法在一个字符大于两个字节时会出现问题
{
let a="𠀇" //码值=0x20007
a.charAt(0) //"�"
a.charCodeAt(0) //显示错误数值
String.fromCharCode('0x20007') // ""
}
四,es6新增字符操作方法:
codePointAt()
返回对应字符的码值
String.fromCodePoint()
返回对应码值上的字符
{
let a="𠀇" //码值=0x20007
a.codePointAt(0) // 0x20007
String.fromCharCode('0x20007') // "𠀇"
}