字符集

0x01 字符与字节

肉眼看到的一个文字或符号单元就是一个单元(包括乱码),一个字符可能对应1~n字节,1字节为8位,每一位要么是1,要么是0

0x02 字符集

一个字符对应1~n字节是由字符集与编码决定的,比如,ASCII字符集就是一个字符对应1字节,不过1字节只用了7位,最高位用于其他目的,所以ASCII字符集共有2的7次方(128)个字符。

0x03 字符集编码

一般字符集对应一种编码方式(比如GBK字符集对应了GBK编码),不过Unicode字符集的编码方式有UTF-8、UTF-7、UTF-16、URF-32。
编码的目的是最终将这些字符正确的转换为计算机可理解的二进制,对应的解码就是将二进制最终解码为人类可读的字符。

0x04 宽字节编码

GB2312、GBK、GB18030、BIG5等就是常说的宽字节,就是只有两字节。宽字节的问题主要是吃ASCII字符(一字节),比如,当字符集为GBK的时候,GBK编码第一字节(高字节)的范围0x81~0xFE,第二字节(低字节)的范围0x40~0xFE,这样的十六进制表示。而\符号的十六进制表示为0x5c,正好在GBK的低字节,如果之前有一个高字节,那么正好会被组成一个合法字符

GB2312是被GBK兼容的,它的高位是0xA1~0xF7,低位是0xA1~0xFE,但是在浏览器中处理行为同GBK,可能是浏览器兼容了,把GB2312统一按GBK处理。

本文标题:字符集

文章作者:Pino-HD

发布时间:2018年05月31日 - 16:05

最后更新:2018年05月31日 - 16:05

原始链接:https://pino-hd.github.io/2018/05/31/字符集/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。

坚持原创技术分享,您的支持将鼓励我继续创作!