ASCII 8bit
- 格式: <0> 0000000 - <0> 1111110
- 区间: 0 ~ 126
- 特点:第一位始终为0
Unicode
- 格式:严 -> 4E25 -> 100111000100101
- 特点:符号集合(一个符号唯一对应一个数值大小) <一张通用数据表>
UTF-8 变 长编码 -> Unicode的内存实现方式'之一'
- 格式:<0xxxxxxxx> <110xxxxx 10xxxxxx> <1110xxxx 10xxxxxx 10xxxxxx> <11110xxx 10xxxxxx 10xxxxxx 10xxxxxx>
- 区间 0 ~ 126 5x + 6x 4x + 6x + 6x 3x + 6x + 6x + 6x 可以理解他们不包含,而是组成连续, 对应Unicode的字符表
- 特点:特定的表示格式,能在存储和网络传输中正确区分字符,表示内容
转换
Unicode -> UTF-8
- 严 -> 4E25 -> 100111000100101 (数值大小) <15个x>
- 大于11x,小于16x,三个字节:1110xxxx 10xxxxxx 10xxxxxx
- 从后面将Unicode bit填入 UTF-8 1110x
1001011100010100101(x = 0)
ASCII -> UTF-8
- ! -> 21(16进制,33十进制) -> 00100001
- 小于等于7x,一个字节:0xxxxxxx
填入bit 0x100001(x = 0)
补充:
- HTTP协议是以ASCII 码传输<这个先记录>(UTF-8的每一个字节就是一个ASCII)
- ?? JSON(Dic) -> Data -> [ASCII] (字节为单位)
- Unicode规范定义:Little endian 和 Big endian,如果一个文本文件的头两个字节是FE FF,就表示该文件采用大头方式;如果头两个字节是FF FE,就表示该文件采用小头方式,如果它出现在字节流的中间,则表达零宽度非换行空格的意义,用户看起来就是一个空格
- UTF-8则没有字节顺序的议题
- UTF-16 UTF32却有字节顺序
-
如图: