聊聊字符集(一)——ASCII字符集和GB2312字符集

由于在工作中经常会遇到数据在各种不同数据库流转的需要,偶尔会碰到一些中文乱码的情况,借此机会,记录一下一些常见的字符集和字符编码。

字符:各种文字和符号的总称,包括各国家文字、标点符号、图形符号、数字等。

字符集:多个字符的集合,字符集种类较多,每个字符集包含的字符个数不同。

字符编码:把字符集中的字符编码为(映射)指定集合中的某一对象(例如:比特模式、自然数序列、电脉冲)的一种规则,以便文本在计算机中存储和通过通信网络的传递。通常特定的字符集采用特定的编码方式(即一种字符集对应一种字符编码(例如:ASCII、IOS-8859-1、GB2312、GBK,都是即表示了字符集又表示了对应的字符编码,但Unicode不是,它采用现代的模型))

常见字符集名称:ASCII字符集、GB2312字符集、BIG5字符集、GB18030字符集、Unicode字符集等。

计算机要准确的处理各种字符集文字,需要进行字符编码,以便计算机能够识别和存储各种文字。

首先咱们来认识下单字节和双字节的概念,在计算机中,1byte=8bit,byte即字节,bit为位,1字节为8位;注:在本文示例中,“x”代表0或1

        单字节 xxxxxxxx
        双字节 xxxxxxxx xxxxxxxx

ASCII字符集:ASCII ((American Standard Code for Information Interchange): 美国信息交换标准代码)是基于拉丁字母的一套电脑编码系统,主要用于显示现代英语和其他西欧语言。它是最通用的信息交换标准,并等同于国际标准ISO/IEC 646。ASCII第一次以规范标准的类型发表是在1967年,最后一次更新则是在1986年,到目前为止共定义了128个字符。

我们今天首先来讲讲ASCII字符集,首先来看ASCII字符集包含了哪些字符:


ASCII字符集采用的是单字节编码,且只使用了单字节中的低7位,最高位是没有使用的,可表示为0xxxxxxxx;可以看到,ASCII字符集共包含128个字符,在英语国家中,128个字符是基本够用的,但是,在其他国家语言中,比如,在法语中,字母上方有注音符号,它就无法用 ASCII 码表示。于是,一些欧洲国家就决定,利用字节中闲置的最高位编入新的符号。比如,法语中的é的编码为130(二进制10000010)。这样一来,这些欧洲国家使用的编码体系,可以表示最多256个符号。但是,这里又出现了新的问题。不同的国家有不同的字母,因此,哪怕它们都使用256个符号的编码方式,代表的字母却不一样。比如,130在法语编码中代表了é,在希伯来语编码中却代表了字母Gimel (ג),在俄语编码中又会代表另一个符号。但是不管怎样,所有这些编码方式中,0--127表示的符号是一样的,不一样的只是128--255的这一段。

        至于亚洲国家的文字,使用的符号就更多了,汉字就多达10万左右。一个字节只能表示256种符号,肯定是不够的,就必须使用多个字节表达一个符号。比如,简体中文常见的编码方式是 GB2312,使用两个字节表示一个汉字,所以理论上最多可以表示 256 x 256 = 65536 个符号。

GB2312编码:1980年3月9日发布,1981年5月1日实施的简体中文汉字编码国家标准,“GB”就是”国标“二字的简称,GB2312对汉字采用双字节编码,收录7445个图形字符,其中包括6763个汉字。

GB2312字符集构成一个94行、94列的二维表,每一个汉字或符号在码表中的位置用它所在的区号和位号来表示,称为区位码,区位码中数字的表示采用的都是十进制。ASCII采用的是单字节编码方式,而GB2312采用的则是双字节编码,第一个字节为“高字节”,即区号,第二个字节为”低字节“,即位号;每个区都是从01到94,所以区位码可表示的字符个数范围为0101-9494,二进制表示为(00000001 000000001-01011110 01011110),目前有一部分区留空未使用,具体情况如下:

01-09区收录除汉字外的682个字符。
10-15区为空白区,没有使用。
16-55区收录3755个一级汉字,按拼音排序。
56-87区收录3008个二级汉字,按部首/笔画排序。
88-94区为空白区,没有使用。

此处以1区和16区来举例,1区中的“。”的区号是01(二进制表示为0001),位号是03(二进制为0011),则“。”的区位码是0103(00000001 00000011),16区中的“啊”的区位码是1601(00010000 00000001)

1区
  0 1 2 3 4 5 6 7 8 9
0     · ˉ ˇ ¨
1
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值