`

ASCII 、GB2312、GBK、GB18030、unicode、UTF-8字符集编码详解

阅读更多

 ASCII字符集编码

ASCII码是7位编码,字符在计算机中以其ASCII码方式表示,其长度为1个字节, 有符号字符型数。编码范围是0x00-0x7F(0~127)。ASCII字符集包括英文字母、阿拉伯数字和标点符号等字符。其中0x00-0x20和0x7F共33个控制字符。

ASCII 十六进制 控制字 代码含义
00           00            NUL      空
01           01            SOH      标题开始
02           02            STX      正文开始
03           03            ETX      正文结束
04           04           EOT        传输结否
05           05           ENQ       询问
06           06           ACK       确认
07           07           BEL        响铃
08           08           BS         退格
09           09           HT         横向列表
10           0A           LF         换行
11          0B            VT         纵向列表
12          0C           FF            换页
13          0D           CR           回车
14          0E           SO            换档(Shift-Out)
15          0F           SI            换档(Shift-In)
16          10           DLE        数据链扩展
17          11           DC1        设备控制1
18          12           DC2        设备控制2
19          13           DC3        设备控制3
20           14           DC4        设备控制4
21          15           NAK        不确认
22          16           SYN        同步字符
23          17           ETB        传输块结否
24          18           CAN        作废
25          19           EM         介质结束
26          1A           SUB        置换
27          1B           ESC        扩展
28          1C           FS            文件分隔符
29          1D           GS         组分隔符
30          1E           RS         记录分隔符
31          1F           US         单位分隔符

ASCII码对照表
ASCII码     键盘     ASCII 码     键盘     ASCII 码     键盘     ASCII 码     键盘
27     ESC     32     SPACE     33     !     34     "
35     #     36     $     37     %     38     &
39     '     40     (     41     )     42     *
43     +     44     '     45     -     46     .
47     /     48     0     49     1     50     2
51     3     52     4     53     5     54     6
55     7     56     8     57     9     58     :
59     ;     60     <     61     =     62     >
63     ?     64     @     65     A     66     B
67     C     68     D     69     E     70     F
71     G     72     H     73     I     74     J
75     K     76     L     77     M     78     N
79     O     80     P     81     Q     82     R
83     S     84     T     85     U     86     V
87     W     88     X     89     Y     90     Z
91     [     92     \     93     ]     94     ^
95     _     96     `     97     a     98     b
99     c     100     d     101     e     102     f
103     g     104     h     105     i     106     j
107     k     108     l     109     m     110     n
111     o     112     p     113     q     114     r
115     s     116     t     117     u     118     v
119     w     120     x     121     y     122     z
123     {     124     |     125     }     126     ~

只支持ASCII码的系统会忽略每个字节的最高位,只认为低7位是有效位。HZ字符编码就是早期为了在只支持7位ASCII系统中传输中文而设计的编码。早期很多邮件系统也只支持ASCII编码,为了传输中文邮件必须使用BASE64或者其他编码方式。


GB2312字符集编码


GB2312 是汉字字符集和编码的代号,中文全称为“信息交换用汉字编码字符集”,由中华人民共和国国家标准总局发布,一九八一年五月一日实施。GB 是“国标” 二字的汉语拼音缩写。

GB2312 字符集 (character set) 只收录简化字汉字,以及一般常用字母和符号,主要通行于中国大陆地区和新加坡等地。GB2312 共收录有 7445 个字符,其中简化汉字 6763 个,字母和符号 682 个。

GB2312 将所收录的字符分为 94 个区,编号为 01 区至 94 区;每个区收录 94 个字符,编号为 01 位至 94 位。GB2312 的每一个字符都由与其唯一对应的区号和位号所确定。例如:汉字“啊”,编号为 16 区 01 位。

GB2312 字符集的区位分布表:

区号    字数    字符类别
01      94    一般符号
02      72    顺序号码
03      94    拉丁字母
04      83    日文假名
05      86    Katakana
06      48    希腊字母
07      66    俄文字母
08      63    汉语拼音符号
09      76    图形符号
10-15            备用区
16-55    3755    一级汉字,以拼音为序
56-87    3008    二级汉字,以笔划为序
88-94            备用区

这本手册列出了 GB2312 的全部字符和它们的区位号。

GB2312 编码

GB2312 原始编码 (encoding) 是对所收录的每个字符都用两个字节 (byte) 表示。第一字节为“高字节”,由字符的区号值加上 32 而形成;第二字节为“低字节”,由字符的位号值加上 32 而形成。例如:汉字“啊”,编号为 16 区 01 位。它的高字节为 16 + 32 = 48 (0x30),低字节为 01 + 32 = 33 (0x21),合并而成的编码为 0x3021。

在区位号值上加 32 的原因大慨是为了避开低值字节区间。

由于 GB2312 原始编码与 ASCII 编码的字节有重叠,现在通行的 GB2312 编码是在原始编码的两个字节上各加 128 修改而形成。例如:汉字“啊”,编号为 16 区 01 位。它的原始编码为 0x3021,通行编码为 0xB0A1。

如果不另加说明,GB2312 常指这种修改过的编码。

GB2312的编码范围是0xA1A1-0x7E7E,去掉未定义的区域之后可以理解为实际编码范围是0xA1A1-0xF7FE。

上面这句有误,应该说GB2312的每一个汉字由两个字节构成,其中每一个字节的范围都在0xA1 ~0xFE,正好每一个字节都有94个编码范围,与区位码个数完全对应。

EUC-CN可以理解为GB2312的别名,和GB2312完全相同。

区位码更应该认为是字符集的定义,定义了所收录的字符和字符位置,而GB2312及EUC-CN是实际计算机环境中支持这种字符集的编码。HZ和 ISO-2022-CN是对应区位码字符集的另外两种编码,都是用7位编码空间来支持汉字。区位码和GB2312编码的关系有点像 Unicode和UTF-8。

GBK字符集编码

GBK 编码是GB2312编码的超集,向下完全兼容GB2312,同时GBK收录了Unicode基本多文种平面中的所有CJK汉字。同 GB2312一样,GBK也支持希腊字母、日文假名字母、俄语字母等字符,但不支持韩语中的表音字符(非汉字字符)。GBK还收录了GB2312不包含的汉字部首符号、竖排标点符号等字符。

GBK的整体编码范围是为:高字节范围是0×81-0xFE,低字节范围是0x40-7E和0x80-0xFE,不包括低字节是0×7F的组合。

低字节是0x40-0x7E的GBK字符有一定特殊性,因为这些字符占用了ASCII码的位置,这样会给一些系统带来麻烦。

有些系统中用0x40-0x7E中的字符(如“|”)做特殊符号,在定位这些符号时又没有判断这些符号是不是属于某个 GBK字符的低字节,这样就会造成错误判断。在支持GB2312的环境下就不存在这个问题。需要注意的是支持GBK的环境中小于0x80的某个字节未必就是ASCII符号;另外就是最好选用小于0×40的ASCII符号做一些特殊符号,这样就可以快速定位,且不用担心是某个汉字的另一半。Big5编码中也存在相应问题。
CP936和GBK的有些许差别,绝大多数情况下可以把CP936当作GBK的别名。

GB18030字符集编码

GB18030编码向下兼容GBK和GB2312,兼容的含义是不仅字符兼容,而且相同字符的编码也相同。GB18030收录了所有Unicode3.1中的字符,包括中国少数民族字符,GBK不支持的韩文字符等等,也可以说是世界大多民族的文字符号都被收录在内。

GBK和GB2312都是双字节等宽编码,如果算上和ASCII兼容所支持的单字节,也可以理解为是单字节和双字节混合的变长编码。GB18030编码是变长编码,有单字节、双字节和四字节三种方式。

GB18030 的单字节编码范围是0x00-0x7F,完全等同与ASCII;双字节编码的范围和GBK相同,高字节是0x81-0xFE,低字节的编码范围是0x40 -0x7E和0x80-FE;四字节编码中第一、三字节的编码范围是0x81-0xFE,二、四字节是0x30-0x39。

Windows 中CP936代码页使用0x80来表示欧元符号,而在GB18030编码中没有使用0x80编码位,用其他位置来表示欧元符号。这可以理解为是 GB18030向下兼容性上的一点小问题;也可以理解为0x80是CP936对GBK的扩展,而GB18030只是和GBK兼容良好。

unicode字符集编码

   每一种语言的不同的编码页,增加了那些需要支持不同语言的软件的复杂度。因而人们制定了一个世界标准,叫做unicode。unicode为每个字符提供了唯一的特定数值,不论在什么平台上、不论在什么软件中,也不论什么语言。也就是说,它世界上使用的所有字符都列出来,并给每一个字符一个唯一特定数值。

Unicode 的最初目标,是用1个16位的编码来为超过65000字符提供映射。但这还不够,它不能覆盖全部历史上的文字,也不能解决传输的问题 (implantation head-ache's),尤其在那些基于网络的应用中。已有的软件必须做大量的工作来程序16位的数据。
因此,Unicode用一些基本的保留字符制定了三套编码方式。它们分别是UTF-8,UTF-16和UTF-32。正如名字所示,在UTF-8中,字符是以8位序列来编码的,用一个或几个字节来表示一个字符。这种方式的最大好处,是UTF-8保留了ASCII字符的编码做为它的一部分,例如,在UTF-8 和ASCII中,“A”的编码都是0x41.

UTF-16和UTF-32分别是Unicode的16位和32位编码方式。考虑到最初的目的,通常说的Unicode就是指UTF-16。在讨论Unicode时,搞清楚哪种编码方式非常重要。

UTF-8字符集编码

Unicode Transformation Format-8bit,允许含BOM,但通常不含BOM。是用以解决国际上字符的一种多字节编码,它对英文使用8位(即一个字节),中文使用24为(三个字节)来编码。UTF-8包含全世界所有国家需要用到的字符,是国际编码,通用性强。UTF-8编码的文字可以在各国支持UTF8字符集的浏览器上显示。如,如果是UTF8编码,则在外国人的英文IE上也能显示中文,他们无需下载IE的中文语言支持包。

GBK的文字编码是用双字节来表示的,即不论中、英文字符均使用双字节来表示,为了区分中文,将其最高位都设定成1。GBK包含全部中文字符,是国家编码,通用性比UTF8差,不过UTF8占用的数据库比GBD大。

GBK、GB2312等与UTF8之间都必须通过Unicode编码才能相互转换:

GBK、GB2312--Unicode--UTF8

UTF8--Unicode--GBK、GB2312

对于一个网站、论坛来说,如果英文字符较多,则建议使用UTF-8节省空间。不过现在很多论坛的插件一般只支持GBK。

分享到:
评论

相关推荐

    JAVA字符编码:Unicode,ISO-8859-1,GBK,UTF-8编码及相互转换

    ### JAVA字符编码详解:Unicode, ISO-8859-1, GBK, UTF-8 及其相互转换 #### 一、引言 在Java编程中,字符编码的管理和转换是一项基本而又重要的任务。不同的编码标准适用于不同的场景,而理解和掌握这些编码之间...

    UTF-8与GB2312之间的互换.doc

    尽管GB2312在中文处理中有着广泛的应用,但由于其字符集有限,不能覆盖所有的汉字,因此后来被GBK和GB18030等更广泛的编码标准所取代。 #### 二、编码转换原理 **从UTF-8转换到GB2312:** 将UTF-8编码的文本转换为...

    汉字Ucode,GBK,UTF-8编码表(真实可用的三种编码!)

    **UTF-8编码**是一种可变长度的字符编码方式,由Ken Thompson提出,支持Unicode标准中的所有字符集。UTF-8编码的优势在于其兼容ASCII码,同时能够高效地表示各种语言的文字,因此被广泛应用于互联网数据传输和存储中...

    中文转UTF-8编码

    ### 中文转UTF-8编码知识点详解 #### 一、前言 在计算机科学与互联网技术领域中,字符编码是一项非常重要的技术。随着全球化的发展,多语言支持成为了软件开发中的基本需求之一。其中,UTF-8(Unicode ...

    labview text to utf8

    英文字符(ASCII字符集)仅需1个字节,而大多数汉字需要3个字节,少数汉字需要4个字节。这种编码方式确保了对ASCII的完全兼容,且在全球范围内具有高度的可读性和互操作性。 **LabVIEW中处理UTF-8的方法:** 1. **...

    豆葵 GB/BIG5/UTF-8 文件编码批量转换工具

    《豆葵 GB/BIG5/UTF-8 文件编码批量转换工具详解》 在信息技术领域,文件编码是一个重要的概念,不同的编码格式适用于不同的场景,如GBK(兼容GB2312)、BIG5(主要应用于繁体中文)和UTF-8(全球通用的多语言编码...

    gbk_utf8_unicode.zip

    GBK编码是中国大陆使用的一种汉字编码标准,它是GB2312的扩展,包含更多的汉字和符号,但它是单字节编码,对于非ASCII字符,GBK不能直接与UTF-8或Unicode相兼容。 描述中提到的问题是,云端的数据以Unicode编码...

    java字符集编码问题

    ### Java字符集编码问题详解 #### 一、引言 在Java编程中,字符集编码问题是一个常见且重要的议题。由于不同的系统、平台以及网络环境中可能存在多种字符编码格式,这导致了在处理文本数据时可能会遇到编码不一致...

    GB2311 UNICODE字符集以及字符编码知识了解

    GB18030是国家标准局发布的另一个编码标准,兼容GBK并进一步扩大了字符集的范围。GB18030标准涵盖了超过27000个汉字,并且支持多字节编码,包括双字节、四字节等多种形式。这意味着GB18030可以覆盖更多的少数民族...

    常用字符集编码[参考].pdf

    本文将详细介绍常用的字符集编码,包括 ASCII、GB2312、GBK、GB18030、Unicode 和 UTF-8 等。 一、ASCII 码 ASCII 码是 7 位编码,编码范围是 0x00-0x7F。ASCII 字符集包括英文字母、阿拉伯数字和标点符号等字符。...

    gb2312标准字符集和gbk标准字符集

    《GB2312与GBK字符集详解》 在信息技术领域,字符编码是至关重要的一个环节,它决定了计算机如何理解和显示各种文字。GB2312和GBK是中国大陆广泛使用的两个字符编码标准,它们为汉字提供了数字化的表示方式,使得...

    unicode/UCS/UTF-8/Base64/ANSI等编码介绍

    《编码规则与用法详解:Unicode、UCS、UTF-8、Base64、ANSI》 在信息技术领域,字符编码是至关重要的,它决定了我们如何在计算机中存储、传输和显示文本。本文将详细介绍几种常见的编码方式,包括Unicode、UCS、UTF...

    UNICODE,UTF8,ANSI 等编码规范详解

    3. GB系列编码:GBK(Great Wall Kludge,大字符集)是GB2312的扩展,增加了更多的汉字和符号。GB18030进一步扩展了GBK,除了汉字外,还包含了少数民族文字,以满足更多语言需求。这些编码方式通常被视为ANSI编码的...

    字符编码详解及由来(UNICODE,UTF-8,GBK) 比较详细

    随着更多汉字和符号的需求,GB2312逐步演变为GBK编码,进一步扩大了字符集,包含约20000个汉字(包括繁体字),并兼容GB2312。GBK仍然使用双字节编码,但扩展了高字节范围,允许更多的编码组合。 尽管GBK解决了大...

    常用字符集编码详解

    本文将深入解析几种常用的字符集编码,包括ASCII、GB2312、GBK、GB18030、Big5以及Unicode及其变种UTF-8、UTF-16、UTF-32,帮助读者理解它们的特点、应用范围及相互之间的转换。 #### ASCII编码 ASCII(American ...

    sybase字符集及各种常用字符集介绍

    - Sybase ASE支持多种本地字符集,如拉丁、希腊、西里尔等,以及Unicode字符集UTF-8,后者能够表示全球超过650种语言的字符。 2. **什么是排序顺序?** - 排序顺序是与特定字符集关联的规则,用于决定字符的排序...

    常用字符编码详解.doc

    字符编码详解 字符编码是计算机科学中的一种基础概念,它是指将文字、符号等字符转换为...字符编码是计算机科学中的一种基础概念,常用的字符编码有 ASCII、GB2312、GBK、GB18030 等,每种编码都有其特点和应用场景。

    中文 Big5/GBK/Unicode/UTF8 内码转换器

    《中文编码转换器详解:Big5、GBK、Unicode与UTF8的互换之道》 在计算机世界里,字符编码是沟通人类语言与机器之间的重要桥梁。本文将详细讲解标题所提及的“中文 Big5/GBK/Unicode/UTF8 内码转换器”这一工具,...

Global site tag (gtag.js) - Google Analytics