字符编码基础
ACSII
美国最初制定的字符编码,对英语字符和二进制之间的关系做了统一规定。
但ASCII码一共规定了128个字符的编码,用来表示其他语言是远远不够的,所以有了Unicode
Unicode
Unicode是一个符号集
javaScript允许直接使用码点表示Unicode字符,'好'==='\u597D'
unescape('\u597d') //好
javaScript使用UCS-2编码格式,属于Unicode的子集
Unicode范围一般所用为\u0000-\uffff,占用两字节大小,最多只能表示65536个字符。
Unicode的四字节形式被称为UCS-4或UTF-32,包含了Unicode的扩展部分,最多可定义100万以上唯一字符。
UTF-8/16/32
UTF-8是编码传输方式
UTF-8是变长编码,根据每个Unicode代码点不同,可以有1-3个字节的不同长度。
Unicode符号范围 | UTF-8编码方式 |
---|---|
(十六进制) | (二进制) |
0000 0000-0000 007F | 0xxxxxxx |
0000 0080-0000 07FF | 110xxxxx 10xxxxxx |
0000 0800-0000 FFFF | 1110xxxx 10xxxxxx 10xxxxxx |
0001 0000-0010 FFFF | 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx |
UTF-16长度相对固定,只要不处理大于\u200000范围的字符,每个Unicode代码点使用16位(2字节)表示,超出部分使用两个UTF-16(4字节)表示。按照高低位字节顺序,又分为UTF-16BE/UTF_16LE.
LE(Litter endian)“小头方式”,以Unicode 4E25为例,需要两个字节来存储,25在前,4E在后就是“大头模式”(Big endian)
UTF-32长度始终固定,每个Unicode代码点使用32位即4字节表示。按照高低位字节顺序,又分为UTF-32BE/UTF-32LE。
进制转换方法
- 十进制转为其他进制
var x = 66;
x.toString(16); //"42"
- 其他进制转换为十进制
parseInt(11,2);//3
写一个方法,将n进制转换为m进制
function translate(num,n,m){
return parseInt(num,n).toString(m)
}
扩展阅读
======================================= END ========================================