返回目录:理财保险
文字编码遇到的一些概念:
字符集:文字的集合就称为字符集(Characterset)。字符集记录了如何用0和1的编码组合代表某一个文字。
字符集包括:ASCII字符集,就是由英文的大写字母、小写字母、数字及特定记号所组成的字符集。还有欧洲语言用的ISO8859,中文的GB2312等,和以表现多语言为目的的Unicode等字符集。
字符编码:字符集中,每个字符都分配一个编码,这称为字符编码。
文字编码方式:计算机上仅仅用整数值来表示文字编码的方式称为文字编码方式。
一个字符集可以对应多种编码方式,对于Unicode字符集,有UTF-8、UTF-16BE、UTF-16LE、UTF-32BE和UTF-32LE等编码方式。
严格来讲,文字编码是指分配给文字的数值,但在一般的对话中,使用文字编码这个词的时候,有时也包含字符集或文字编码方式等意思。
面向英语国家的ASCII字符集
ASCII码由7位二进制数构成,可以表现英文字母、数字和一些记号($、&等),共128个字符。这带来的一个好处就是,对于通信单位的字节(8位)来说,可以省出1位,用于附加错误检测码。
走向英语以外的语言(欧洲篇)ISO8859
为了表现英语以外的欧洲语言,26个文字通常不够。于是就使用ASCII中没有使用的第8位来表现文字。第8位一用,就可以再表现128个文字。
但欧洲国家各国的字符也有所不同,于是就在ISO8859中定义了16种文字集。我们来感受一下:
走向英语以外的国家(中国篇)GB系列(非《程序世界》原书内容)
而世界上还有第三世界国家,他们的文字各不相同。如何用0和1的组合表示呢。于是各个国家就编制了各自的字符集。中国也是如此。目前大家经常遇到的就是gb2312,gbk,gb18030三个字符集。
GB 2312 或 GB 2312-80 是中国国家标准简体中文字符集,GB 2312 标准共收录 6763 个汉字。
GBK 即汉字内码扩展规范,GBK 共收入 21886 个汉字和图形符号。
GB 18030,全称:国家标准 GB 18030-2005《信息技术中文编码字符集》GB 18030 与 GB 2312-1980 和 GBK 兼容,共收录汉字70244个。
gb18030的编码方式:(随便看看就好)
GB 18030 编码是一二四字节变长编码。
单字节,其值从 0 到 0x7F,与 ASCII 编码兼容。
双字节,第一个字节的值从 0x81 到 0xFE,第二个字节的值从 0x40 到 0xFE(不包括0x7F),与 GBK 标准兼容。
四字节,第一个字节的值从 0x81 到 0xFE,第二个字节的值从 0x30 到 0x39,第三个字节从0x81 到 0xFE,第四个字节从 0x30 到 0x39。
走向大一统Unicode(非《程序世界》原书内容)
截止到本文时,现在最新的unicode标准是2017年制定的。包括136,690个字符。注意:现在,Unicode放弃了16位方式,而用21位来表示一个文字。现在Unicode的有效编码范围是0~0x10ffff,能够表示111万4111个文字。不管有多少字,这肯定够用了。
unicode的编码方式:
utf-16utf-32的编码方式目前已经没有任何价值了,不推荐使用。所以我们只介绍目前最为流行的utf-8编码方式:
第一字节第8位(最上位)不是ON的字节,表示1字节文字(ASCII的空间)。
只要看第一字节位的式样就能知道接下来还有几个字节,数数有几位是1就行了。
多字节文字的各个字节,除了第一字节以外,都以10开始(第8位是1,第7位是0)。即便不从字符串的先头开始扫描,也能知道构成这个文字的第一个字节在哪里。
采用以字节为单位的编码方式,没有字节顺序问题。
大小端存储模式:
最后我们补充一下字节顺序的问题,也就是所谓的大小端问题。相信你知道这个故事。
littleendian和bigendian这两个词,来源于英国讽刺作家斯威夫特所著的《格列佛游记》(1726年)。第一篇Lilliput国航行记中讲述,剥鸡蛋从尖的那一头开始剥的Lilliput国(littleendian)与从圆的那一头开始剥的Blefuscu国(bigendian)之间战争的故事。战争的原因在于剥鸡蛋的方法有分歧。
那么什么是大端模式和小端模式呢?
对于一个字节的内容,不存在大小端的问题。而如int,long等多字节表示一个内容的数据类型来说,是把数据的高字节包存在低地址还是高地址就有了分歧。
大端模式:是指数据的高字节保存在内存的低地址中,而数据的低字节保存在内存的高地址中。主要用于网络传输。
小端模式,是指数据的高字节保存在内存的高地址中,而数据的低字节保存在内存的低地址中。个人pc中主要是小端模式。
如何记忆呢?你就记变大了就拧巴了。
比如:0x12345678这个值。
在小端是的内存里是这样的:低地址端—78 56 34 12—高地址端
而在大端是这样的:低地址端—12 34 56 78—高地址端
下面是一个判断你的电脑的大小端的小段代码: