非数值数据
所谓的非数值数据,通常是指字符、字符串、图形符号、汉字、逻辑数据等各种数据,这类数据不用来表示数值的大小,没有量值的概念。
由于计算机内部只能识别和处理二进制数据,所以即使是非数值数据,在计算机中也应该按照一定的规则用一组二进制编码来表示。
字符数据的表示
对于字符,现在使用的最广泛的是美国国家信息交换标准字符码(American Standard Code for Information Interchange, ASCII).
常见的ASCII码用7位二进制表示1个字符,包括10个十进制数字(0-9)、52个英文大写和小写字母(A-Z,a-z)、34个专用符号和32个控制符号,共计128个字符。
字符在内存中存储:通常用一个字节来存放一个字符。一个字节右边的7位表示不同的ASCII代码,最左边一位可以作奇偶校验位,用来检查错误。
字符串:是指一串连续的字符。
字符串在存储器中存放有两种方法:“向量法”和“串表法”。“向量法”占用一片连续的空间,每个字节存放一个字符代码。所有字符在物理存储上是邻接的。
向量法是最简单、最节省存储空间的方法。当字符串需要进行删除和插入操作时,在删除或插入字符后面的子字符串需要全部重新分配存储空间,会花费较多的时间。
串表法:字符串的每个字符代码后有一个链接字,用以指出下一个字符的存储单元地址。
串表法不要求串中的各个字符在物理上相邻,原则上讲,串中各字符可以安排在存储器的任意位置上。在对字符串进行删除和插入操作时,只需修改响应字符代码后面的链接字即可。
汉字的表示
汉字的编码:中国国家标准总局1980年发布《信息交换用汉字编码字符集》,
GB2312编码适用于汉字处理、汉字通信等系统之间的信息交换,通行于中国大陆、新加坡等地。
1990年颁布了繁体字的编码标准GB12345-90《信息交换用汉字编码字符集第一辅助集》目的在于规范必须使用繁体字的各种场合。
1995年底推出的GBK编码是中文编码扩展国家标准,该编码兼容GB2312。
2000年底,国家标准总局又颁布了GB18030大字符集,这个标准全面兼容GB2312。GB18030有两个版本:GB18030-2000和GB18030-2005。 GB18030-2005是以汉字为主并包含多种我国少数民族文字的超大型中文编码字符集。
汉字的编码分为:国标码、区位码、机内码、字型码。
1. 国标码也称为汉字交换码。主要用于处理汉字信息处理系统之间或者通信系统之间交换信息使用。
2. 区位码是一种输入码,区位码定长4位,前2位表示区号,后2位表示位号,汉字的区号和位号均用十进制数表示。 它并不等于汉字国标码,它们两者之间的关系为:国标码=区位码(十六进制)+2020H。
3. 机内码是计算机内部的编码。 汉字可以通过不同的输入码输入,但在计算机内部的编码是唯一的。汉字机内码是两字节长的代码,它是在相应国标码的每个字节最高位上加1所得。机内码和国标码的关系是:机内码=国标码+8080
4. 汉字字形码是指确定一个汉字字形点阵的代码,又叫汉字字模码或汉字输出码。根据对汉字质量的不同要求,可有16*16、24*24、32*32、48*48的点阵结构。
前3种汉字编码的关系:
汉字国际码=汉字区位码(十六进制)+2020H
汉字机内码=汉字国标码+8080H
汉字机内码=汉字区位码(十六进制)+A0A0H
统一码(Unicode)
统一码(Unicode),也叫万国码、单一码,是计算机科学领域里的一项业界标准,包括字符集、编码方案等。Unicode是为了解决传统的字符编码方案的局限而产生的,它为每种语言中的每个字符设定了统一并且唯一的二进制编码,以满足跨语言、跨平台进行文本转换、处理的要求。1990年开始研发,1994年正式发布1.0版本。
Unicode可分为编码方式和实现方式两个层次。
编码方式
用一个16位的二进制数(两个字节)来表示Unicode的每一个符号。
实现方法
一个字符的Unicode的编码是确定的,但在实际的传输过程中, 由于不同系统平台的设计不一定一致。 Unicode的实现方式称为Unicode的转换格式(unicode Translation Format, UTF).