精华内容
下载资源
问答
  • 内码、外码、字形码又是什么意思?它们是如何转换,又为什么要这样转换? 下面以GB2312为例来加以说明。 一、区位码 1. 整个GB2312字符集分成94个区,每区有94个位,每个区位上只有一个字符,即每区含有94个...

    GB2312、GBK、GB18030等GB系列汉字编码方案的具体实现方式是怎样的?区位码是什么?国标码是什么?内码、外码、字形码又是什么意思?它们是如何转换的,又为什么要这样转换?

    下面以GB2312为例来加以说明。

     

    一、区位码

    1.

    整个GB2312字符集分成94个区,每区有94个位,每个区位上只有一个字符,即每区含有94个汉字或符号,用所在的区和位来对字符进行编码(实际上就是码点值、码点编号、字符编号),因此称为区位码(或许叫“区位号”更为恰当)。

    换言之,GB2312将包括汉字在内的所有字符编入一个94*94的二维表,行就是“区”、列就是“位”,每个字符由区、位唯一定位,其对应的区、位编号合并就是区位码。

    比如“万”字在45区82位,所以“万”字的区位码是:45 82(注意,GB类汉字编码为双字节编码,因此,45相当于高位字节,82相当于低位字节)。

    2.

    GB2312字符集中:

    1)01~09区(682个):特殊符号、数字、英文字符、制表符等,包括拉丁字母、希腊字母、日文平假名及片假名字母、俄语西里尔字母等在内的682个全角字符;

    2)10~15区:空区,留待扩展;

    3)16~55区(3755个):常用汉字(也称一级汉字),按拼音排序;

    4)56~87区(3008个):非常用汉字(也称二级汉字),按部首/笔画排序;

    5)88~94区:空区,留待扩展。

     

    二、国标码(交换码)

    1.

    为了避开ASCII字符中的不可显示字符0000 0000 ~ 0001 1111(十六进制为0 ~ 1F,十进制为0 ~ 31)及空格字符0010 0000(十六进制为20,十进制为32)(至于为什么要避开、又为什么只避开ASCII中0~32的不可显示字符和空格字符,后文有解释),国标码(又称为交换码)规定表示汉字的范围为(0010 0001,0010 0001) ~ (0111 1110,0111 1110),十六进制为(21,21) ~ (7E,7E),十进制为(33,33) ~ (126,126)。

    因此,必须将“区码”和“位码”分别加上32(十六进制为20,可写作20H或0x20,后缀H或前缀0x都可表示十六进制),作为国标码。也就是说,国标码相当于将区位码向后偏移了32,以避免与ASCII字符中0~32的不可显示字符和空格字符相冲突。

    2.

    注意,国标码中是分别将区位码中的“区”和“位”各自加上32(20H)的,因为GB2312是DBCS双字节字符集,因此国标码属于双字节码。

    这样我们可以算出“万”字的国标码十进制为:(45+32,82+32) = (77,114),十六进制为:(4D,72),二进制为:(0100 1101,0111 0010)。

    (笨笨阿林原创文章,转载请注明出处)

     

    三、内码(机内码)

    1.

    不过国标码还不能直接在计算机上使用,因为这样还是会和早已通用的ASCII码冲突,从而导致乱码。

    比如,“万”字国标码中的高位字节77与ASCII的“M”冲突,低位字节114与ASCII的“r”冲突。因此,为避免与ASCII码冲突,规定国标码中的每个字节的最高位都从0换成1,即相当于每个字节都再加上128(十六进制为80,即80H;二进制为1000 0000),从而得到国标码的“机内码”表示,简称“内码”。

    2.

    由于ASCII码只用了一个字节中的低7位,所以,这个首位(最高位)上的“1”就可以作为识别汉字编码的标志,计算机在处理到首位是“1”的编码时就把它理解为汉字,在处理到首位是“0”的编码时就把它理解为ASCII字符。

    比如:

      77 + 128 = 205(二进制为1100 1101,十六进制为CD)

      114+ 128 = 242(二进制为1111 0010,十六进制为F2)

    3.

    我们可以来检验一下。打开记事本输入“万”字,编码选择为ANSI(Windows记事本中的ANSI编码在简体中文版操作系统中默认为GB类编码,详见后文解释),保存,如下图所示。

    然后用二进制编辑器(比如UltraEdit)打开刚才保存的文件,切换到十六进制模式,会看到:CD F2,这就是“万”字的内码,如下图所示。

    4.

    小结一下:

    从区位码(国家标准定义) ---> 区码和位码分别+32(即+20H)得到国标码 ---> 再分别+128(即+80H)得到机内码(与ACSII码不再冲突)。

    因此,区位码的区和位分别+160(即+A0H,32+128=160)可直接得到内码。用十六进制表示就是:

       区位码(区码, 位码) + (20H, 20H) + (80H, 80H)
      = 区位码(区码, 位码) + (A0H, A0H)
      = 内码(高字节, 低字节)。

    (注:十六进制数既可通过添加后缀H来表示,也可通过添加前缀0x来表示)

     

    四、为什么要加上20H和80H?

    1.

    区位码、国标码、内码的转换非常简单,但令人迷惑的是为什么要这么转换?

    首先,需要注意到一点,GB2312虽说是汉字编码方案,但其实里面也有针对26个英文字母和一些特殊符号的编码,按理说这些和ASCII重合的字符(33~127)应该无需再重新编码,直接沿用ASCII编码不就行了?

    2.

    原来,当时在制定GB2312时,决定对ASCII中的可打印字符,也就是英文字母、数字和符号部分(33~126,127为不可打印的DEL)重新编入GB2312中,以两个字节表示,称之为全角字符(全角字符在屏幕上的显示宽度为ASCII字符的两倍,后来也因此而将对应的ASCII字符称之为半角字符)。

    而对于ASCII中前32个不可显示也不可打印的控制字符(ASCII码为0~31),以及第33个可显示但不可打印的空格字符(ASCII码为32)等一共33个不可打印字符的编码则直接沿用,不再重新编码。

    3.

    因为要保留这33个不可打印字符,就不能直接采用区位码作为计算机直接处理的机内码,需要将区位码向后偏移32以避开冲突(为什么是偏移32,而不是偏移33?因为区位码中的区码和位码都是从1开始计数的,不像ASCII码是从0开始计数的)。

    十进制数字32的十六进制表示就是20H,这也就是区位码的区码和位码都分别要加上20H才能得到国标码的原因。

    (笨笨阿林原创文章,转载请注明出处)

    4.

    不过,如果直接采用国标码作为计算机直接处理的机内码的话,还是会与ASCII编码产生冲突,导致乱码。

    因为国标码虽然相较于区位码避开了ASCII码中0~32的前33个不可打印字符,但并没有避开ASCII码中的英文字母、数字和符号等可打印字符(33~126,共94个字符)以及不可打印的DEL(127)。也就是说,国标码并不是完全兼容ASCII码的。

    5.

    为了彻底避免与ASCII码的冲突,考虑到ASCII码只使用了一个字节中的低7位,其最高位(即首位)总是为0,于是决定将国标码中每个字节的最高位设为1(国标码的两个字节中的最高位都总是为0,即国标码中的每个字节与ASCII码一样实际上也只用了一个字节中的低7位),这就是GB2312的机内码(即内码),简称GB2312码。

    这样一来就彻底区分开了ASCII码和GB2312码。这也是为什么国标码还要加上(80H,80H)才能得到机内码的原因。

    6.

    看到这里,有人或许又要问了:如果仅仅是为了避免与ASCII码相冲突,为什么最初不直接将区位码的区码和位码的最高位从0改为1(相当于各自直接加上128),这样不就无需经过国标码多此一举的中间转换了吗?而且还无需后移32,也就不用浪费这部分编码空间。

    对此本人也很困惑,在网上搜了很久也没找到答案,因此具体原因不得而知。或许是一开始考虑不周?或许是为了未来扩展所需而预留一部分空间?又或许是有其他不得已的原因?有知道的朋友还望能指点迷津。

    GB2312区位码、国标码、内码对照表(其中汉字内码B0A1~F7FE,共6763个)

     

    五、外码(输入码、输入法编码)

    1.

    外码也叫输入码、输入法编码,是用来将汉字输入到计算机中的一组键盘符号,是作为汉字输入用的编码。

    英文字母只有26个,可以把所有的字符都放到键盘上,而使用这种办法把所有的汉字都放到键盘上是不可能的。所以汉字系统需要有自己的输入码体系,使汉字与键盘能建立起对应关系。

    2.

    目前常用的汉字外码分为以下几类:

    1)数字编码,比如区位码;

    2)拼音编码,比如全拼、双拼、自然码等;

    3)字形编码,比如五笔、表形码、郑码等。

    3.

    汉字外码往往会出现重码。

    所谓重码,指的是同一个汉字外码对应于多个汉字,反过来说,也就是可能有多个汉字的外码是相同的,相当于重复了,所以称之为“重码”。比如使用拼音作为外码时(即使用拼音输入法输入汉字时),重码现象是相当普遍的。

    当出现重码时,往往需要附加选择编号以具体确定所要输入的汉字,这种情况下,可认为外码实际上相当于隐式地包括了选择编号在内。

     

    六、字形码(字型码、字模码、输出码)

    1.

    字形码,又称为字型码、字模码、输出码,属于点阵代码的一种。

    为了将汉字在显示器或打印机上输出,把汉字按图形符号设计成点阵图,就得到了相应的点阵代码(字形码)。

    也就是用0、1表示汉字的字形,将汉字放入n行*n列的正方形(即点阵)内,该正方形共有n^2个小方格,每个小方格用一位二进制数表示,凡是笔划经过的方格其值为1,未经过的方格其值为0。

    2.

    显示一个汉字一般采用16×16点阵或24×24点阵或48×48点阵。已知汉字点阵的大小,可以计算出存储一个汉字所需占用的字节空间。

    比如,用16×16点阵表示一个汉字,就是将每个汉字用16行,每行16个点表示,一个点需要1位二进制数,16个点需用16位二进制数(即2个字节),所以需要16行×2字节/行=32字节,即以16×16点阵来表示一个汉字,字形码需要32字节。

    因此,字节数=点阵行数×(点阵列数/8)。

    3.

    显然,字形码所表示的字符,相对于抽象字符表ACR里的“抽象”字符,可称之为“具体”字符,因为已经具有了“具体”的外形。

    4.

    为了将汉字的字形显示输出或打印输出,汉字信息处理系统还需要配有汉字字形库,也称字模库,简称字库,它集中存储了汉字的字形信息。

    字库按输出方式可分为显示字库和打印字库。用于显示输出的字库叫显示字库,工作时需调入内存。用于打印输出的字库叫打印字库,工作时无需调入内存。

    字库按存储方式也可分为软字库和硬字库。软字库以字体文件(即字形文件)的形式存放在硬盘上,现多用这种方式。硬字库则将字库固化在一个单独的存储芯片中,再和其它必要的器件组成接口卡,插接在计算机上,通常称为汉卡。这种方式现已淘汰。

     

    七、总结

    1.

    可以这样理解,为在计算机内表示汉字而采取统一的编码方式所形成的汉字编码叫内码。为方便汉字输入而形成的汉字编码为外码,也叫输入码。为显示输出和打印输出汉字而形成的汉字编码为字形码,也称为字模码、输出码。

    通过键盘输入汉字外码,然后输入法将汉字外码转换为当前操作系统所默认采用的字符编码方案的字符编号(即码点值),再根据字符编号通过代码页查表的方式转换为汉字内码(代码页详见前文的介绍),以实现输入汉字的目的;然后根据所选择的字体,通过汉字内码在字模库(即字库)中找出与字体相对应的字形码,从而将汉字内码转换为汉字字形码,以实现显示输出和打印输出汉字的目的。

    事实上,英文字符的输入、处理和显示过程大致上也差不多,只不过英文字符不需要输入码(即外码),直接在键盘上输入对应的英文字母即可。

    2.

    注意,ASCII码,以及EASCII、ISO 8859系列、GB系列、Big5和Shift JIS等既兼容ASCII码又互相之间不兼容的ANSI编码(“ANSI编码”是对世界上各个国家和地区所制定的既兼容ASCII码又互相之间不兼容的各种字符编码的统称,下一篇文章将详细介绍这个统称的来龙去脉),都属于传统字符编码模型,而不属于现代字符编码模型,很难直接简单套用现代字符编码模型中的概念来表述。

    如果一定要套用的话,就GB系列编码而言,勉强来说,区位码相当于现代字符编码模型中编号字符集CCS的字符编号,国标码相当于字符编码方式CEF的码元序列,而机内码则相当于字符编码模式CES的字节序列。

    不过,由于GB系列编码虽然是多字节编码,但码元却是单字节码元(码元的概念后文有详细介绍),因此不存在字节序问题,也就不存在字符编码模式CES中的大端序、小端序的概念(字节序以及大端序、小端序的概念后文有详细介绍)。

    (笨笨阿林原创文章,转载请注明出处)

     

     

    【预告:下一篇将重点剖析非常容易令人困惑的所谓ANSI编码与代码页(Code Page),敬请关注!

     

     

    0x80~0x9f 在ISO 8859中是C1控制字符,兼容原因

     

     

     

     

     

     

     

    展开全文
  • 内码、外码、字形码又是什么意思?它们是如何转换,又为什么要这样转换?下面以GB2312为例来加以说明。一、区位码1.整个GB2312字符集分成94个区,每区有94个位,每个区位上只有一个字符,即每区含有94个汉字或符号...

    88211b144cc66cbae8bd569c09a8adea.png

    GB2312、GBK、GB18030等GB系列汉字编码方案的具体实现方式是怎样的?区位码是什么?国标码是什么?内码、外码、字形码又是什么意思?它们是如何转换的,又为什么要这样转换?

    下面以GB2312为例来加以说明。

    一、区位码

    1.

    整个GB2312字符集分成94个区,每区有94个位,每个区位上只有一个字符,即每区含有94个汉字或符号,用所在的区和位来对字符进行编码(实际上就是码点值、码点编号、字符编号),因此称为区位码(或许叫“区位号”更为恰当)。

    换言之,GB2312将包括汉字在内的所有字符编入一个94*94的二维表,行就是“区”、列就是“位”,每个字符由区、位唯一定位,其对应的区、位编号合并就是区位码。

    比如“万”字在45区82位,所以“万”字的区位码是:45 82(注意,GB类汉字编码为双字节编码,因此,45相当于高位字节,82相当于低位字节)。

    2.

    GB2312字符集中:

    1)01~09区(682个):特殊符号、数字、英文字符、制表符等,包括拉丁字母、希腊字母、日文平假名及片假名字母、俄语西里尔字母等在内的682个全角字符;

    2)10~15区:空区,留待扩展;

    3)16~55区(3755个):常用汉字(也称一级汉字),按拼音排序;

    4)56~87区(3008个):非常用汉字(也称二级汉字),按部首/笔画排序;

    5)88~94区:空区,留待扩展。

    二、国标码(交换码)

    1.

    为了避开ASCII字符中的不可显示字符0000 0000 ~ 0001 1111(十六进制为0 ~ 1F,十进制为0 ~ 31)及空格字符0010 0000(十六进制为20,十进制为32)(至于为什么要避开、又为什么只避开ASCII中0~32的不可显示字符和空格字符,后文有解释),国标码(又称为交换码)规定表示汉字的范围为(0010 0001,0010 0001) ~ (0111 1110,0111 1110),十六进制为(21,21) ~ (7E,7E),十进制为(33,33) ~ (126,126)。

    因此,必须将“区码”和“位码”分别加上32(十六进制为20,可写作20H或0x20,后缀H或前缀0x都可表示十六进制),作为国标码。也就是说,国标码相当于将区位码向后偏移了32,以避免与ASCII字符中0~32的不可显示字符和空格字符相冲突。

    2.

    注意,国标码中是分别将区位码中的“区”和“位”各自加上32(20H)的,因为GB2312是DBCS双字节字符集,因此国标码属于双字节码。

    这样我们可以算出“万”字的国标码十进制为:(45+32,82+32) = (77,114),十六进制为:(4D,72),二进制为:(0100 1101,0111 0010)。

    (笨笨阿林原创文章,转载请注明出处)

    三、内码(机内码)

    1.

    不过国标码还不能直接在计算机上使用,因为这样还是会和早已通用的ASCII码冲突,从而导致乱码。

    比如,“万”字国标码中的高位字节77与ASCII的“M”冲突,低位字节114与ASCII的“r”冲突。因此,为避免与ASCII码冲突,规定国标码中的每个字节的最高位都从0换成1,即相当于每个字节都再加上128(十六进制为80,即80H;二进制为1000 0000),从而得到国标码的“机内码”表示,简称“内码”。

    2.

    由于ASCII码只用了一个字节中的低7位,所以,这个首位(最高位)上的“1”就可以作为识别汉字编码的标志,计算机在处理到首位是“1”的编码时就把它理解为汉字,在处理到首位是“0”的编码时就把它理解为ASCII字符。

    比如:

      77 + 128 = 205(二进制为1100 1101,十六进制为CD)

      114+ 128 = 242(二进制为1111 0010,十六进制为F2)

    3.

    我们可以来检验一下。打开记事本输入“万”字,编码选择为ANSI(Windows记事本中的ANSI编码在简体中文版操作系统中默认为GB类编码,详见后文解释),保存,如下图所示。

    590fe93bdfba6ae5d1c7fb3f04bde5ec.png

    然后用二进制编辑器(比如UltraEdit)打开刚才保存的文件,切换到十六进制模式,会看到:CD F2,这就是“万”字的内码,如下图所示。

    8bfac093f9c833e8675468906dc75017.png

    4.

    小结一下:

    从区位码(国家标准定义) ---> 区码和位码分别+32(即+20H)得到国标码 ---> 再分别+128(即+80H)得到机内码(与ACSII码不再冲突)。

    因此,区位码的区和位分别+160(即+A0H,32+128=160)可直接得到内码。用十六进制表示就是:

       区位码(区码, 位码) + (20H, 20H) + (80H, 80H)
      = 区位码(区码, 位码) + (A0H, A0H)
      = 内码(高字节, 低字节)。

    b8464c8e70c2b76d8985a81717b47638.png
    (注:十六进制数既可通过添加后缀H来表示,也可通过添加前缀0x来表示)

    四、为什么要加上20H和80H?

    1.

    区位码、国标码、内码的转换非常简单,但令人迷惑的是为什么要这么转换?

    首先,需要注意到一点,GB2312虽说是汉字编码方案,但其实里面也有针对26个英文字母和一些特殊符号的编码,按理说这些和ASCII重合的字符(33~127)应该无需再重新编码,直接沿用ASCII编码不就行了?

    2.

    原来,当时在制定GB2312时,决定对ASCII中的可打印字符,也就是英文字母、数字和符号部分(33~126,127为不可打印的DEL)重新编入GB2312中,以两个字节表示,称之为全角字符(全角字符在屏幕上的显示宽度为ASCII字符的两倍,后来也因此而将对应的ASCII字符称之为半角字符)。

    而对于ASCII中前32个不可显示也不可打印的控制字符(ASCII码为0~31),以及第33个可显示但不可打印的空格字符(ASCII码为32)等一共33个不可打印字符的编码则直接沿用,不再重新编码。

    3.

    因为要保留这33个不可打印字符,就不能直接采用区位码作为计算机直接处理的机内码,需要将区位码向后偏移32以避开冲突(为什么是偏移32,而不是偏移33?因为区位码中的区码和位码都是从1开始计数的,不像ASCII码是从0开始计数的)。

    十进制数字32的十六进制表示就是20H,这也就是区位码的区码和位码都分别要加上20H才能得到国标码的原因。

    (笨笨阿林原创文章,转载请注明出处)

    4.

    不过,如果直接采用国标码作为计算机直接处理的机内码的话,还是会与ASCII编码产生冲突,导致乱码。

    因为国标码虽然相较于区位码避开了ASCII码中0~32的前33个不可打印字符,但并没有避开ASCII码中的英文字母、数字和符号等可打印字符(33~126,共94个字符)以及不可打印的DEL(127)。也就是说,国标码并不是完全兼容ASCII码的。

    5.

    为了彻底避免与ASCII码的冲突,考虑到ASCII码只使用了一个字节中的低7位,其最高位(即首位)总是为0,于是决定将国标码中每个字节的最高位设为1(国标码的两个字节中的最高位都总是为0,即国标码中的每个字节与ASCII码一样实际上也只用了一个字节中的低7位),这就是GB2312的机内码(即内码),简称GB2312码。

    这样一来就彻底区分开了ASCII码和GB2312码。这也是为什么国标码还要加上(80H,80H)才能得到机内码的原因。

    6.

    看到这里,有人或许又要问了:如果仅仅是为了避免与ASCII码相冲突,为什么最初不直接将区位码的区码和位码的最高位从0改为1(相当于各自直接加上128),这样不就无需经过国标码多此一举的中间转换了吗?而且还无需后移32,也就不用浪费这部分编码空间。

    对此本人也很困惑,在网上搜了很久也没找到答案,因此具体原因不得而知。或许是一开始考虑不周?或许是为了未来扩展所需而预留一部分空间?又或许是有其他不得已的原因?有知道的朋友还望能指点迷津。

    bdab86295551c7a612901f9874c9c373.png

    GB2312区位码、国标码、内码对照表(其中汉字内码B0A1~F7FE,共6763个)

    五、外码(输入码、输入法编码)

    1.

    外码也叫输入码、输入法编码,是用来将汉字输入到计算机中的一组键盘符号,是作为汉字输入用的编码。

    英文字母只有26个,可以把所有的字符都放到键盘上,而使用这种办法把所有的汉字都放到键盘上是不可能的。所以汉字系统需要有自己的输入码体系,使汉字与键盘能建立起对应关系。

    2.

    目前常用的汉字外码分为以下几类:

    1)数字编码,比如区位码;

    2)拼音编码,比如全拼、双拼、自然码等;

    3)字形编码,比如五笔、表形码、郑码等。

    3.

    汉字外码往往会出现重码。

    所谓重码,指的是同一个汉字外码对应于多个汉字,反过来说,也就是可能有多个汉字的外码是相同的,相当于重复了,所以称之为“重码”。比如使用拼音作为外码时(即使用拼音输入法输入汉字时),重码现象是相当普遍的。

    当出现重码时,往往需要附加选择编号以具体确定所要输入的汉字,这种情况下,可认为外码实际上相当于隐式地包括了选择编号在内。

    六、字形码(字型码、字模码、输出码)

    1.

    字形码,又称为字型码、字模码、输出码,属于点阵代码的一种。

    为了将汉字在显示器或打印机上输出,把汉字按图形符号设计成点阵图,就得到了相应的点阵代码(字形码)。

    也就是用0、1表示汉字的字形,将汉字放入n行*n列的正方形(即点阵)内,该正方形共有n^2个小方格,每个小方格用一位二进制数表示,凡是笔划经过的方格其值为1,未经过的方格其值为0。

    2.

    显示一个汉字一般采用16×16点阵或24×24点阵或48×48点阵。已知汉字点阵的大小,可以计算出存储一个汉字所需占用的字节空间。

    比如,用16×16点阵表示一个汉字,就是将每个汉字用16行,每行16个点表示,一个点需要1位二进制数,16个点需用16位二进制数(即2个字节),所以需要16行×2字节/行=32字节,即以16×16点阵来表示一个汉字,字形码需要32字节。

    因此,字节数=点阵行数×(点阵列数/8)。

    3.

    显然,字形码所表示的字符,相对于抽象字符表ACR里的“抽象”字符,可称之为“具体”字符,因为已经具有了“具体”的外形。

    e7802bf4e81c47bb91435932d64be41e.png

    4.

    为了将汉字的字形显示输出或打印输出,汉字信息处理系统还需要配有汉字字形库,也称字模库,简称字库,它集中存储了汉字的字形信息。

    字库按输出方式可分为显示字库和打印字库。用于显示输出的字库叫显示字库,工作时需调入内存。用于打印输出的字库叫打印字库,工作时无需调入内存。

    字库按存储方式也可分为软字库和硬字库。软字库以字体文件(即字形文件)的形式存放在硬盘上,现多用这种方式。硬字库则将字库固化在一个单独的存储芯片中,再和其它必要的器件组成接口卡,插接在计算机上,通常称为汉卡。这种方式现已淘汰。

    七、总结

    1.

    31d5d6e4f606c135bc0c21511669a2ca.png

    可以这样理解,为在计算机内表示汉字而采取统一的编码方式所形成的汉字编码叫内码。为方便汉字输入而形成的汉字编码为外码,也叫输入码。为显示输出和打印输出汉字而形成的汉字编码为字形码,也称为字模码、输出码。

    通过键盘输入汉字外码,然后输入法将汉字外码转换为当前操作系统所默认采用的字符编码方案的字符编号(即码点值),再根据字符编号通过代码页查表的方式转换为汉字内码(代码页详见前文的介绍),以实现输入汉字的目的;然后根据所选择的字体,通过汉字内码在字模库(即字库)中找出与字体相对应的字形码,从而将汉字内码转换为汉字字形码,以实现显示输出和打印输出汉字的目的。

    fa226d263c6a6ae7133ce67e21c28138.png

    事实上,英文字符的输入、处理和显示过程大致上也差不多,只不过英文字符不需要输入码(即外码),直接在键盘上输入对应的英文字母即可。

    2.

    注意,ASCII码,以及EASCII、ISO 8859系列、GB系列、Big5和Shift JIS等既兼容ASCII码又互相之间不兼容的ANSI编码(“ANSI编码”是对世界上各个国家和地区所制定的既兼容ASCII码又互相之间不兼容的各种字符编码的统称,下一篇文章将详细介绍这个统称的来龙去脉),都属于传统字符编码模型,而不属于现代字符编码模型,很难直接简单套用现代字符编码模型中的概念来表述。

    如果一定要套用的话,就GB系列编码而言,勉强来说,区位码相当于现代字符编码模型中编号字符集CCS的字符编号,国标码相当于字符编码方式CEF的码元序列,而机内码则相当于字符编码模式CES的字节序列。

    不过,由于GB系列编码虽然是多字节编码,但码元却是单字节码元(码元的概念后文有详细介绍),因此不存在字节序问题,也就不存在字符编码模式CES中的大端序、小端序的概念(字节序以及大端序、小端序的概念后文有详细介绍)。

    (笨笨阿林原创文章,转载请注明出处)

    【预告:下一篇将重点剖析非常容易令人困惑的所谓ANSI编码与代码页(Code Page),敬请关注!

    上一篇:刨根究底字符编码之五--简体汉字编码方案(GB2312、GBK、GB18030、GB13000)以及全角、半角、CJK - 知乎专栏

    下一篇:刨根究底字符编码之七--ANSI编码与代码页(Code Page) - 知乎专栏

    展开全文
  • 外码:假设有两个关系R1和R2,R2中一个或者一组属性不是R2主码,而是R2主码,则把这组属性称为R2的外码,并且把R2叫做参照关系,把R1叫做被参照关系。 主属性:在主码中属性 非主属性:不在主码中属性 ....
    1. 候选码:能唯一标识关系中的元组的一个属性或属性集。
      具有唯一性:任意两个不同的元组,对应的候选码中的属性的值组成的集合都是不相等的。
      具有最小性:即候选码含有的属性的个数要最少
    2. 主码:有多个候选码时,从中选出一个作为这个关系的主码
    3. 外码:假设有两个关系R1和R2,R2中的一个或者一组属性不是R2的主码,而是R2的主码,则把这组属性称为R2的外码,并且把R2叫做参照关系,把R1叫做被参照关系。
    4. 主属性:在主码中的属性
    5. 非主属性:不在任何候选码中的属性
    展开全文
  • 四次握手包中含有以上哪些东西呢?客户端MAC地址,APBSSID,A-NONCE,S-NONE,MIC,最关键PMK和PTK是不包含在握手包里! 8 A2 m6 T& }) U2 J认证原理是在获得以上所有参数后,客户端算出一个MIC,把...
  • EmEditor V12+注册

    热门讨论 2013-01-22 11:53:13
    用EmEditor不管你文章是否含有换行符,即使容量为几MB文件也可以很快地打开编辑。和其它许多文字处理软件不同,EmEditor可以垂直或水平滚动窗口数百万行或数百万列。当然你也可以在1秒中内同时打开多个...
  • 一、填空题(本题10空 ,每空1分,共10分 )1... 在关系A(S,SN,D)和B(D,CN,NM)中,A主码是S,B主码是D,则D在A中称为③外码。4. 数据库系统中最重要软件是④数据库管理系统(或DBMS),最重要用户是⑤数据库管...

    一、填空题(本题10空 ,每空1分,共10分 )

    1. 关系数据模型由关系数据结构、关系操作和①关系完整性约束三部分组成。

    2.  一般情况下,当对关系R和S使用自然连接时,要求R和S含有一个或多个共有的②属性

    3. 在关系A(S,SN,D)和B(D,CN,NM)中,A的主码是S,B的主码是D,则D在A中称为③外码。

    4. 数据库系统中最重要的软件是④数据库管理系统(或DBMS),最重要的用户是⑤数据库管理员(或DBA)

    5. 数据库设计分为以下六个设计阶段:需求分析阶段、⑥概念结构设计阶段、逻辑结构设计阶段、⑦物理结构设计阶段、数据库实施阶段、数据库运行和维护阶段。

    6. 已知关系R(A,B,C,D)和R上的函数依赖集F={A→CD,C→B},则

    R∈⑧2NF。

    7. 关系模式分解的等价性标准主要有两个,分别为分解具有⑨无损链接性和⑩保持函数依赖。

    二、单项选择题(请在每小题的4个备选答案中,选出一个最佳答案,共20小题;每小题1分,共20分)

    1. 数据库系统的核心是( B   )

    A.数据库 B.数据库管理系统

    C.数据模型 D.软件工具

    2.在关系数据库设计中,设计关系模式是数据库设计中(   A   )阶段的任务

    A. 逻辑设计    B.物理设计     C.需求分析     D.概念设计

    3.事务的隔离性是指(  A    )。

    A.一个事务内部的操作及使用的数据对并发的其他事务是隔离的

    B.事务一旦提交,对数据库的改变是永久的

    C.事务中包括的所有操作要么都做,要么都不做

    D.事务必须是使数据库从一个一致性状态变到另一个一致性状态

    4.若事务T对数据对象A加上S锁,则(  B    )。

    A.事务T可以读A和修改A,其它事务只能再对A加S锁,而不能加X 锁。

    B.事务T可以读A但不能修改A,其它事务只能再对A加S锁,而不能加X 锁。

    C.事务T可以读A但不能修改A,其它事务能对A加S锁和X锁。

    D.事务T可以读A和修改A,其它事务能对A加S锁和X锁。

    5. 设有两个事务T1、T2,其并发操作如图2所示,下面评价正确的是( B     )

    A. 该操作不存在问题         B. 该操作丢失修改

    C. 该操作不能重复读     D. 该操作读“脏”数据

    T1                      T2

    ① 读A=100

    ②                      读A=100

    ③ A=A-5写回

    ④                      A=A-8写回

    图2

    6.从E-R模型关系向关系模型转换时,一个M:N联系转换为关系模式时,该关系模式的关键字是(  C  )。

    A.M端实体的关键字         B.N端实体的关键字

    C.M端实体关键字与N端实体关键字组合      D.重新选取其他属性

    7.在数据库设计中, E-R图产生于(  D     )

    A. 需求分析阶段   B.物理设计阶段

    C.逻辑设计阶段    D.概念设计阶段

    8. (       )用来记录对数据库中数据进行的每一次更新操作。

    A.后援副本    B.日志文件

    C.数据库    D.缓冲区

    9. 数据库管理系统能实现对数据库中数据的查询、插入、修改和删除等操作的数据库语言称为(      )

    A.数据定义语言(DDL)      B.数据管理语言

    C.数据操纵语言(DML)       D.数据控制语言

    10.如果事务T已在数据R上加了X锁,则其他事务在数据R上(      )

    A. 只可加X锁 B. 只可加S锁

    C. 可加S锁或X锁 D. 不能加任何锁

    三、简答题(本题共4小题,每小题5分,共20分 )

    1、试描述数据库设计的全部过程(3分)以及过程中各个阶段的设计描述(2分)?

    2、说明可能破环参照完整性的情况(3分)以及相应的违约处理(2分)。

    3、什么是视图,(2分)它的优点是什么?(3分)

    4、什么是数据库中的自主存取控制方法(2分)和强制存取控制方式?(3分)

    5、简述事务的特性(5分)。

    6、并发操作可能会产生哪几类数据不一致(3分)? 用什么方法避免不一致的情况?(2分)。

    四、SQL语言(本题共8小题,共25分)

    设有关系模式:S(SNO,SNAME,CITY),其中,S表示供应商,SNO为供应商代号,SNAME为供应商名字,CITY为供应商所在城市。

    P(PNO,PNAME,COLOR,WEIGHT),其中P表示零件,PNO为零件代号,PNAME为零件名字,COLOR为零件颜色,WEIGHT为零件重量。

    J(JNO,JNAME,CITY),其中,J表示工程,JNO为工程编号,JNAME为工程名字,CITY为工程所在城市。

    SPJ(SNO,PNO,JNO,CITY),其中,SPJ表示供应关系,SNO是为指定工程提供零件的供应商代号,PNO为所提供的零件代号,JNO为工程编号,QTY表示提供的零件数量。

    1. 查询为工程J1提供零件的供应商代号;

    SELECT SNO

    FROM SPJ

    WHERE JNO=’JI’;

    2. 由供应商S1提供零件的工程名称;

    SELECT J.JNAME

    FROM J, SPJ

    WHERE J.JNO=SPJ.JNO AND SPJ.SNO=’S1’;

    3. 查询出重量最轻的零件代号;

    SELECT PNO

    FROM P

    WHERE WEIGHT IN

    (SELECT MIN (WEIGHT) FROM P);

    4. 查询为工程J1提供红色零件的供应商代号;

    SELECT DISTINCT SPJ.SNO

    FROM SPJ, P

    WHERE P.PNO=SPJ.PNO AND SPJ.JNO=’JI’ AND P.COLOR=’红’;

    5. 查询由供应商S1提供零件的工程的代号;

    SELECT DISTINCT SPJ.JNO

    FROM S, P, SPJ

    WHERE S.SNO=SPJ.SNO AND P.PNO=SPJ.PNO AND S.SNO=’S1’;

    6. 计算同一个城市中工程的数量。

    SELECT COUNT(JNO)

    FROM  J

    GROUP BY CITY;

    7. 向S表插入一条记录,SNO为‘S6’,SN为‘N6’,CITY为‘南京’

    INSERT INTO S

    VALUES(‘S6’,‘N6’,‘南京’);

    8. 将SNO为S3的城市改为上海。

    UPDATE S

    SET CITY=‘上海’

    WHERE SNO=‘S3’;

    9. 删除J表中工程号为‘J6’的记录。

    DELETE FROM J

    WHERE JNO=‘J6’;

    10. 用SQL的GRANT命令给用户张三授予对SPJ表的SELET权力,并且可以将该权利授予其他用户。

    GRANT SELECT ON  SPJ TO 张三

    WITH GRANT OPTION;

    五、综合题(本题2小题,共25分)

    1. 现有如下关系模式:借阅(图书编号,书名,作者名,出版社,读者编号,读者姓名,借阅日期,归还日期),基本函数依赖集F={图书编号→(书名,作者名,出版社),读者编号→读者姓名,(图书编号,读者编号,借阅日期)→归还日期}

    (1)读者编号是候选码吗?(2分)

    (2)写出该关系模式的主码。(2分)

    (3)该关系模式中是否存在非主属性对码的部分函数依赖?如果存在,请写出一个。(2分)

    (4)该关系模式满足第几范式?并说明理由。(4分)

    答:(1)不是(2分)。

    (2)(图书编号,读者编号,借阅日期)(2分)

    (3)存在(1分)。(图书编号,读者编号,借阅日期)→书名、(图书编号,读者编号,借阅日期)→作者名、(图书编号,读者编号,借阅日期)→出版社、(图书编号,读者编号,借阅日期)→读者姓名(1分,四个函数依赖任选一个即可)

    (4)1NF。因为存在非主属性对码的部分函数依赖。

    2.某企业集团有若干工厂,每个工厂生产多种产品,且每一种产品可以在多个工厂生产,每个工厂按照固定的计划数量生产产品;每个工厂聘用多名职工,且每名职工只能在一个工厂工作,工厂聘用职工有聘期和工资。工厂的属性有工厂编号、厂名、地址,产品的属性有产品编号、产品名、规格,职工的属性有职工号、姓名。

    (1)根据上述语义画出E-R图;(5分)

    063a6cf8e0d4e8c7c5ef866a12e6e9fd.png

    2)将该E-R模型转换为关系模型;(5分)(要求:1:1和1:n的联系进行合并)

    转化后的关系模式如下:

    工厂(工厂编号,厂名,地址)

    产品(产品编号,产品名,规格)

    职工(职工号,姓名,工产编号,聘期,工资)

    生产(工产编号,产品编号,计划数量)

    (3)指出转换结果中每个关系模式的主码和外码。(5分)

    每个关系模式的主码、外码如下:

    工厂:主码是工产编号;

    产品:主码是产品编号;

    职工:职工号,外码是工厂编号;

    生产:主码是(工产编号,产品编号),

    外码是工产编号、产品编号。

    展开全文
  • 什么是VLAN

    2013-10-23 09:59:12
     VLAN除了能将网络划分为多个广播域,从而有效地控制广播风暴发生,以及使网络拓扑结构变得非常灵活优点,还可以用于控制网络中不同部门、不同站点之间互相访问。  VLAN是为解决以太网广播问题和安全...
  • 数据库复习题

    2017-12-23 22:21:00
    一、填空题(本题10空 ,每空1分,共10分 ) 1. 关系数据模型由关系数据结构、关系操作和①关系完整...3. 在关系A(S,SN,D)和B(D,CN,NM)中,A主码是S,B主码是D,则D在A中称为③外码 。 4. 数据库系统...
  • 使用自然连接要求是,两者需要含有一个或多个共有属性; 视图是数据库系统三级模式中的外模式; SQL是非过程化语言,用户无需知道存取路径; 视图不存储数据; 连接有左连接,右连接,全连接; 数据库...
  • 数据库习题

    千次阅读 2020-03-03 16:28:20
    定义理解下列术语,理解相关的关系 1 域 笛卡尔积 关系 元组 属性 域:一组具有相同的数据类型的值的集合,例如建立了一个学生信息表,其中含有学号这个属性,域就是这个学校的学号的集合。...2、主 候选 ...
  • 一、基本概念 1、每一个二维表称为一个关系;表中每一行数据称为一个元组,也称为记录;表格中每一列称为一个属性,...4、如果关系模式R中某属性子集不是R主键,而是另一关系R1主键,则该属性集是关系R的外
  • 说明: 使用字节或点语义来指定新列创建, 如 char, varchar2, clob, nchar, nvarchar2, nclob 列。各种字符集对字符都有各自定义。在客户机和服务器上使用同一字符集时, 应以该字符集所定义字符来衡量字符串...
  • 4:三个版本之间的关系 JE几乎完全包含JSE的功能,然后在JSE的基础上添加了很多新的功能。 JME主要是JSE的功能子集,然后冉加上一部分额外添加的功能 PDF文件使用" pdfFactory Pro"试用版本创建ww, fineprint...
  • 会计理论考试题

    2012-03-07 21:04:40
    19.系统软件与应用软件相互关系是 __D___ 。 A、前者以后者为基础 B、每一类都以另一类为基础 C、每一类都不以另一类为基础 D、后者以前者为基础 20.计算机辅助设计软件主要用于___B___。 A、文字处理 B、制图和...
  •  删除HKDY_LOCAL_MACHINE/SOFTWARE/ODBC/ODBCINST.INI中除Microsoft ODBC for Oracle注册表键以外所有含有Oracle键。  删除环境变量中PATHT CLASSPATH中包含Oracle值。  删除“开始”/“程序”中所有...
  • 23、编写gbk_strlen函数,计算含有汉字字符串长度,汉字作为一个字符处理;已知:汉字编码为双字节,其中 参数里涉及指针,就要考虑该指针是不是一个需要修改量,如果是,则参数应采用指向指针指针。 (C语言里...
  • c#学习笔记.txt

    2008-12-15 14:01:21
    用引号引起来字符串括在双引号 (") 内, 并且可以包含包括换序列在内任何字符用 @ 引起来字符串以 @ 开头,并用双引号引起来。用 @ 引起来字符串以 @ 开头,并用双引号引起来。若要在一个用 @ 引起来字符...
  • 是,Linux 上有公认 C 语言世界最好编译器 gcc,如果你想得到一个效率更高开 发环境(并不一定是最友好,但一定是最强大),我建议你一定要好好熟悉一下 Linux。 三.如何得到Linux? 据我所知...
  • “确认”: 该键完成对其他功能键确认,防止误按键,在键盘中除“复位”键,其他功能键都必须加“确认”键才能完成所定义功能。 “复位”: 该键为重启系统按键。在任何时候或者系统出现不正常状态时都可按下...
  •  含有下列参数 bootcfg 命令仅在使用故障恢复控制台时才可用。可在命令提示符下使用带有不同参数 bootcfg 命令。  用法:  bootcfg /default 设置默认引导项。  bootcfg /add 向引导列表中添加 Windows...
  • 大学文献检索资料 DOC

    2009-11-28 10:35:24
    含有知识内容信息载体。 2.构成文献三要素:知识内容、物质载体、记录手段。 3.文献基本功能:存储知识信息、传播知识信息。 4. 科技文献特点: 形式多、文种多。数量多、增长快。交叉重复。失效快、寿命短...
  • Apache Sqoop: 是一个用来将Hadoop和关系型数据库中数据相互转移工具,可以将一个关系型数据库(MySQL ,Oracle ,Postgres等)中数据导进到HadoopHDFS中,也可以将HDFS数据导进到关系型数据库中 ...
  • 千里马酒店前台管理系统V7使用手册

    热门讨论 2011-06-16 14:09:38
    同时也借鉴了国内先进软件功能特性,吸取了几百家酒店客户反馈意见,在保持千里马传统“以财务为核心、前后台一体化”基础上,进一步吸收了收益管理、客户关系管理、营销分析、决策支持等先进管理思想,...
  • 2.3 关系数据库生命周期 17 2.3.1 需求收集和分析 17 2.3.2 逻辑数据库设计 18 2.3.3 物理数据库设计 25 2.3.4 实现物理设计 27 2.4 反向设计数据库 28 2.5 对象—关系和对象数据库 28 2.5.1 关系...
  • 可以用一个通俗的例子来说明它们之间的关系。我们到银行去存取款时, 银行工作人员将根据我们的帐号去找我们的存款单, 找到之后在存单上写入存款、取款的金额。在这里,帐号就是存单的指针, 存款数是存单的内容。...
  • 进程互斥体现了进程之间对资源竞争关系,这时进程相互之间不一定清楚其它进程情况,往往指多个任务多个进程间通讯制约,因而使用更广泛。如打篮球时双方挣抢篮板球等。 (2)临界区 并发进程中与...
  • 2.1.2 使用SQL Server 2008的关系数据仓库 23 2.1.3 使用SQL Server 2008的多维数据库和数据挖掘 25 2.1.4 使用SQL Server 2008管理报表 26 2.2 规划SQL Server 2008的部署 27 2.2.1 建立服务器的性能系统 27 ...

空空如也

空空如也

1 2
收藏数 37
精华内容 14
关键字:

含有外码的关系是