字符编码基础

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。

进制转换方法

  1. 十进制转为其他进制
var x = 66;
x.toString(16); //"42"

  1. 其他进制转换为十进制
parseInt(11,2);//3

写一个方法,将n进制转换为m进制

function translate(num,n,m){
    return parseInt(num,n).toString(m)
}

扩展阅读

http://www.ruanyifeng.com/blog/2014/12/unicode.html

https://blog.whezh.com/encoded/

posted @ 2018-08-28 18:20  zhangce  阅读(163)  评论(0编辑  收藏  举报