之前对字符集和编码以及字体这些基本上是知道的,出现问题也知道baidu查。基本上也能解决。但是不是非常清晰或者说不能掌握全局上和历史上的知识,最近又在看字体的相关配置。又涉及到编码和字符集,做个整理。备忘记
ASCII这个都知道,信息交换美国标准码(American Standard Code for Information Interchange) ,占1字节(8bit),单字节2^8次方有256个组合,但实际只用了前128个组合位,后128个组合位美国用于存放制表符或者其他符号,但其他国家搞信息化前128个位置保持兼容,但后128个位置存放的都是各个国家自己的字符或者符号。
ANSI美国国家标准学会(AMERICAN NATIONAL STANDARDS INSTITUTE) 也是一种字符编码,使用 0x00~0x7f 范围的1 个字节来表示 1 个英文字符。超出此范围的使用0x80~0xFFFF来编码。ANSI再不同的国家和地区是不通的。
在windows中,ANSI编码如果是简体中文,那就是GB2312,繁体中文,那就是BIG5,日文,则是JIS。
所以虽然前128个位置都兼容ASCII,但是后面都是各个国家地区自己扩展的。
Unicode 它是一个标准,而不是编码1994年发布了1.0版本,2020年发布了13.0版本
unicode有两套标准,UCS-2 (2字节16位---这里是指码位而不是具体编码哦)UCS-4(4字节32位)
目前使用UCS-2,2^16=65535个码位位置。
但实际上编码不会是每个字符的长度一样,最常见的UTF-8,是变长字符编码,用1-4个字节表示它可以表示Unicode全球统一字符集中的任何字符,且其编码中的第一个字节仍与ASCII相容,在UTF-8编码中一个英文占1个字节,一个中文汉字占3个字节。
UTF-8 顾名思义,是一套以 8 位为一个编码单位的可变长编码),它将一个码位编码为 1 到 4 个字节。
下面是白嫖的图,对应的码位位置以及二进制编码对应关系。
可以看到从0x0000-0x007F,这128个码位,对应的是一0xxxxxxx,跟ASCII的128个编码是一样的。
下面是直接白嫖拷贝的例子。
例如「知」的码位是 30693,记作 U+77E5(30693 的十六进制为 0x77E5,在unicode码位表总就是77E5)
根据上表中的编码规则,「知」字的码位 U+77E5 属于第三行的范围(U+77E5在U+0800-U+FFFF之间),那么编码使用了3个字节,对应的编码换算如下
再白嫖一个编码字节数的图
ISO-8859-1 :单字节编码,编码范围0x00-0xFF,向下兼容ASCII,0x80--0xFF属于扩展部分,支持部分用于欧洲的语言,包括阿尔巴尼亚语、巴斯克语、布列塔尼语、加泰罗尼亚语、丹麦语、荷兰语、法罗语、弗里西语、加利西亚语、德语、格陵兰语、冰岛语、爱尔兰盖尔语、意大利语、拉丁语、卢森堡语、挪威语、葡萄牙语、里托罗曼斯语、苏格兰盖尔语、西班牙语及瑞典语。
Latin1是ISO-8859-1的别名。
目前中文的常见编码有(UOS上我就不关心win的情况了):
GB2312,简单总结就是 收录6763个汉字和图形682个。
GBK (GB13000) 兼容GB2312,收录了21003个汉字,并支持国际标准ISO/IEC10646—1(国标GB13000-1和10646-1相等),属于GB2312和unicode的ISO10646平滑过度版本(因为他GBK向下兼容GB2312),包括GB13000-1标准中的中日韩汉子以及BIG5编码中的所有汉字
GB18030 目前最新是GB18030-2005,兼容GB2312 GBK,收录汉字70244个。目前最广泛或者最全的编码(除了公安部的人口信息库用的编码库外) ,变长多字节编码, 编码空间161W个,完全支持unicode,
由中国国家标准总局1980年发布,1981年5月1日开始实施的一套国家标准,标准号是GB 2312—1980。
GB2312编码适用于汉字处理、汉字通信等系统之间的信息交换,通行于中国大陆;新加坡等地也采用此编码。中国大陆几乎所有的中文系统和国际化的软件都支持GB 2312。
基本集共收入汉字6763个和非汉字图形字符682个。整个字符集分成94个区,每区有94个位。每个区位上只有一个字符,因此可用所在的区和位来对汉字进行编码,称为区位码。
把换算成十六进制的区位码加上2020H,就得到国标码。国标码加上8080H,就得到常用的计算机机内码。1995年又颁布了《汉字编码扩展规范》(GBK)。GBK与GB 2312—1980国家标准所对应的内码标准兼容,同时在字汇一级支持ISO/IEC10646—1和GB 13000—1的全部中、日、韩(CJK)汉字,共计20902字。
GBK全称《汉字内码扩展规范》(GBK即“国标”、“扩展”汉语拼音的第一个字母,英文名称:Chinese Internal Code Specification) ,中华人民共和国全国信息技术标准化技术委员会1995年12月1日制订,国家技术监督局标准化司、电子工业部科技与质量监督司1995年12月15日联合以技监标函1995 229号文件的形式,将它确定为技术规范指导性文件。2000年已被GB18030-2000《信息交换用 汉字编码字符集 基本集的扩充》国家强制标准替代。 [2] 2005年GB18030-2005发布,替代了GB18030-2000
我国 1993 年以 GB 13000.1 国家标准的形式予以认可(即 GB 13000.1 等同于 ISO 10646.1)
1991年,不包含CJK统一汉字集的Unicode 1.0发布。随后,CJK统一汉字集的制定于1993年完成,发布了ISO 10646-1:1993,即Unicode 1.1。