简单讲解ANSI Unicode、GBK、GB2312

简单讲解ANSI Unicode、GBK、GB2312

GB2312:涵盖了所有简体字符以及一部分其他字符

GBK:在GB2312的基础上加入了对繁体字符等其他非简体字符

(K代表扩展)

ANSI编码,通常指的是平台的默认编码,例如英文操作系统中是ISO-8859-1,中文系统是GBK

这些编码会通过代码页直接将字符映射为存储设备上的字节流

缺点也很明显,扩展性差,如果有新的一门语言,往里加的话会不方便,因为其中 的编码已经写死了,只要移动一下 ,原有的编码会很容易打乱。Unicode 则没有这种困扰。

中国的GBK,GB2312和GB18030编码

操作系统在发布的时候,通常会往机器里预装这些标准的字符集还有平台专用的字符集

提问:如果一个文档中有十几个国家的文字,那么文档能正常显示吗?

回答:把所有的编码格式都包含在其中——Unicode

Unicode字符集概述

Unicode字符集涵盖了目前人类使用的所有字符,并为每个字符进行统一编号,分配唯一的字符码(Code Point)

UTF-8 (应用最广的一种Unicode编码方案)

Unicode是两个字节吗?

Unicode只是定义了一个庞大的、全球通用的字符集,并为每个字符规定了唯一确定的编号,具体存储为什么样的字节流,取决于字符编码方案。推荐的Unicode编码是UTF-16和UTF-8。

带签名的UTF-8指的是什么意思?

带签名指的是字节流以BOM标记开始。很多软件会“智能”的探测当前字节流使用的字符编码,这种探测过程出于效率考虑,通常会提取字节流前面若干个字节,看看是否符合某些常见字符编码的编码规则。由于UTF-8和ASCII编码对于纯英文的编码是一样的,无法区分开来,因此通过在字节流最前面添加BOM标记可以告诉软件,当前使用的是Unicode编码,判别成功率就十分准确了。但是需要注意,不是所有软件或者程序都能正确处理BOM标记,例如PHP就不会检测BOM标记,直接把它当普通字节流解析了。因此如果你的PHP文件是采用带BOM标记的UTF-8进行编码的,那么有可能会出现问题。

Unicode编码和以前的字符集编码有什么区别?

早期字符编码、字符集和代码页等概念都是表达同一个意思。例如GB2312字符集、GB2312编码,936代码页,实际上说的是同个东西。但是对于Unicode则不同,Unicode字符集只是定义了字符的集合和唯一编号,Unicode编码,则是对UTF-8、UCS-2/UTF-16等具体编码方案的统称而已,并不是具体的编码方案。所以当需要用到字符编码的时候,你可以写gb2312,codepage936,utf-8,utf-16,但请不要写unicode(看过别人在网页的meta标签里头写charset=unicode,有感而发)。

                       

点击阅读全文

上一篇 2023年 6月 7日 am10:27
下一篇 2023年 6月 7日 am10:28