精华内容
下载资源
问答
  • 中文汉字计算机编码

    千次阅读 2016-07-11 17:37:58
    =============很久以前保存的,别人写的但是很明了============= 很久很久以前,有一群人,他们决定用8个可以开合的晶体管来组合成不同的状态,以表示世界上的...他们看到这样是好的,于是它们就这机器称为”计算机“。

    =============很久以前保存的,别人写的但是很明了=============

    很久很久以前,有一群人,他们决定用8个可以开合的晶体管来组合成不同的状态,以表示世界上的万物。他们看到8个开关状态是好的,于是他们把这称为”字节“。再后来,他们又做了一些可以处理这些字节的机器,机器开动了,可以用字节来组合出很多状态,状态开始变来变去。他们看到这样是好的,于是它们就这机器称为”计算机“。


    开始计算机只在美国用。八位的字节一共可以组合出256(2的8次方)种不同的状态。 他们把其中的编号从0开始的32种状态分别规定了特殊的用途,一但终端、打印机遇上约定好的这些字节被传过来时,就要做一些约定的动作。遇上0×10, 终端就换行,遇上0×07, 终端就向人们嘟嘟叫,例好遇上0x1b, 打印机就打印反白的字,或者终端就用彩色显示字母。他们看到这样很好,于是就把这些0×20以下的字节状态称为”控制码”。他们又把所有的空 格、标点符号、数字、大小写字母分别用连续的字节状态表示,一直编到了第127号,这样计算机就可以用不同字节来存储英语的文字了。大家看到这样,都感觉 很好,于是大家都把这个方案叫做 ANSI 的”Ascii”编码(American Standard Code for Information Interchange,美国信息互换标准代码)。当时世界上所有的计算机都用同样的ASCII方案来保存英文文字。


    后来,就像建造巴比伦塔一样,世界各地的都开始使用计算机,但是很多国家用的不是英文,他们的字母里有许多是ASCII里没有的,为了可以在计算机保存他们的文字,他们决定采用 127号之后的空位来表示这些新的字母、符号,还加入了很多画表格时需要用下到的横线、竖线、交叉等形状,一直把序号编到了最后一个状态255。从128 到255这一页的字符集被称”扩展字符集“。从此之后,贪婪的人类再没有新的状态可以用了,美帝国主义可能没有想到还有第三世界国家的人们也希望可以用到计算机吧!


    等中国人们得到计算机时,已经没有可以利用的字节状态来表示汉字,况且有6000多个常用汉字需要保存呢。但是这难不倒智慧的中国人民,我们不客气地把那些127号之后的奇异符号们直接取消掉, 规定:一个小于127的字符的意义与原来相同,但两个大于127的字符连在一起时,就表示一个汉字,前面的一个字节(他称之为高字节)从0xA1用到 0xF7,后面一个字节(低字节)从0xA1到0xFE,这样我们就可以组合出大约7000多个简体汉字了。在这些编码里,我们还把数学符号、罗马希腊的字母、日文的假名们都编进去了,连在 ASCII 里本来就有的数字、标点、字母都统统重新编了两个字节长的编码,这就是常说的”全角”字符,而原来在127号以下的那些就叫”半角”字符了。 中国人民看到这样很不错,于是就把这种汉字方案叫做 “GB2312“。GB2312 是对 ASCII 的中文扩展。


    但是中国的汉字太多了,我们很快就就发现有许多人的人名没有办法在这里打出来,特别是某些很会麻烦别人的国家领导人。于是我们不得不继续把 GB2312 没有用到的码位找出来老实不客气地用上。 后来还是不够用,于是干脆不再要求低字节一定是127号之后的内码,只要第一个字节是大于127就固定表示这是一个汉字的开始,不管后面跟的是不是扩展字符集里的内容。结果扩展之后的编码方案被称为GBK 标准,GBK包括了GB2312 的所有内容,同时又增加了近20000个新的汉字(包括繁体字)和符号。 后来少数民族也要用电脑了,于是我们再扩展,又加了几千个新的少数民族的字,GBK扩成了GB18030。从此之后,中华民族的文化就可以在计算机时代中传承了。 中国的程序员们看到这一系列汉字编码的标准是好的,于是通称他们叫做 “DBCS“(Double Byte Charecter Set 双字节字符集)。在DBCS系列标准里,最大的特点是两字节长的汉字字符和一字节长的英文字符并存于同一套编码方案里,因此他们写的程序为了支持中文处理,必须要注意字串里的每一个字节的值,如果这个值是大于127的,那么就认为一个双字节字符集里的字符出现了。那时候凡是受过加持,会编程的计算机僧侣 们都要每天念下面这个咒语数百遍: “一个汉字算两个英文字符!一个汉字算两个英文字符……”


    因为当时各个国家都像中国这样搞出一套自己的编码标准,结果互相之间谁也不懂谁的编码,谁也不支持别人的编码,连大陆和台湾这样只相隔了150海里,使用着同一种语言的兄弟地区,也分别采用了不同的 DBCS 编码方案——当时的中国人想让电脑显示汉字,就必须装上一个”汉字系统”,专门用来处理汉字的显示、输入的问题,但是那个台湾的愚昧封建人士写的算命程序就必须加装另一套支持 BIG5 编码的什么”倚天汉字系统”才可以用,装错了字符系统,显示就会乱了套!这怎么办?而且世界民族之林中还有那些一时用不上电脑的穷苦人民,他们的文字又怎么办? 真是计算机的巴比伦塔命题啊!


    正在这时,大天使加百列及时出现了——一个叫 ISO (国际标谁化组织)的国际组织决定着手解决这个问题。他们采用的方法很简单:废了所有的地区性编码方案,重新搞一个包括了地球上所有文化、所有字母和符号 的编码!他们打算叫它”Universal Multiple-Octet Coded Character Set”,简称UCS, 俗称 “unicode“。


    unicode开始制订时,计算机的存储器容量极大地发展了,空间再也不成为问题了。于是 ISO 就直接规定必须用两个字节,也就是16位来统一表示所有的字符,对于ASCII里的那些“半角”字符,unicode包持其原编码不变,只是将其长度由原来的8位扩展为16位,而其他文化和语言的字符则全部重新统一编码。由于”半角”英文符号只需要用到低8位,所以其高8位永远是0,因此这种大气的方案在保存英文文本时会多浪费一倍的空间。


    这时候,从旧社会里走过来的程序员开始发现一个奇怪的现象:他们的strlen函数靠不住了,一个汉字不再是相当于两个字符了,而是一个!是的,从unicode开始,无论是半角的英文字母,还是全角的汉字,它们都是统一的”一个字符“!同时,也都是统一的”两个字节“,请注意”字符”和”字节”两个术语的不同,“字节”是一个8位的物理存贮单元,而“字符”则是一个文化相关的符号。在unicode中,一个字符就是两个字节。一个汉字算两个英文字符的时代已经快过去了。


    unicode同样也不完美,这里就有两个的问题,一个是,如何才能区别unicode和ascii?计算机怎么知道三个字节表示一个符号,而不是分别表示三个符号呢?第二个问题是,我们已经知道,英文字母只用一个字节表示就够了,如果unicode统一规定,每个符号用三个或四个字节表示,那么每个英文字母前都必然有二到三个字节是0,这对于存储空间来说是极大的浪费,文本文件的大小会因此大出二三倍,这是难以接受的。


    unicode在很长一段时间内无法推广,直到互联网的出现,为解决unicode如何在网络上传输的问题,于是面向传输的众多 UTF(UCS Transfer Format)标准出现了,顾名思义,UTF-8就是每次8个位传输数据,而UTF-16就是每次16个位。UTF-8就是在互联网上使用最广的一种unicode的实现方式,这是为传输而设计的编码,并使编码无国界,这样就可以显示全世界上所有文化的字符了。

    UTF-8最大的一个特点,就是它是一种变长的编码方式。它可以使用1~4个字节表示一个符号,根据不同的符号而变化字节长度,当字符在ASCII码的范围时,就用一个字节表示,保留了ASCII字符一个字节的编码做为它的一部分,注意的是unicode一个中文字符占2个字节,而UTF-8一个中文字符占3个字节)。从unicode到uft-8并不是直接的对应,而是要过一些算法和规则来转换。


    Unicode符号范围 | UTF-8编码方式

    (十六进制) | (二进制)
    —————————————————————–
    0000 0000-0000 007F | 0xxxxxxx
    0000 0080-0000 07FF | 110xxxxx 10xxxxxx
    0000 0800-0000 FFFF | 1110xxxx 10xxxxxx 10xxxxxx
    0001 0000-0010 FFFF | 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx


    展开全文
  • GB2312-80(国标码).txt GBK(大字库).txt Big5(大五码).txt Unicode(大字符集).txt
  • 作者以前Windows平台编程时,对于字符串显示中文以及不同的字符集编码格式不太理解。最近编写资料用到这部分知识,便通过自己的分析和参考资料做了简单运用,下面我们一起分析常用的编码集与中文编码! 章节预览...

      作者以前在Windows平台编程时,对于字符串显示中文以及不同的字符集编码格式不太理解。最近编写资料用到这部分知识,便通过自己的分析和参考资料做了简单运用,下面我们一起分析常用的编码集与中文编码!


    章节预览:


    1.字符数组存储GB2312中文编码
    2.GB2312标准
    3.输出乱码原理
    4.整数存储GB2312中文编码
    5.Uncode
    6.UTF-8
    7.整数存储UTF-8中文编码


    章节内容:


    字符数组存储GB2312中文编码:


      首先,我们通过字符数组输出“你好”,参考代码:
        unsigned char testch[4] = {0};
        memcpy(testch, “你好”, strlen(“你好”));
        printf("%s|", testch);

        得出的结果为:你好烫烫烫烫
                                  |


    首先,我们分析testch输出的信息:

      我们定义一个256字节的字符数组保存testch值:
        unsigned char testch2[256] = {0};
        memcpy(testch2, testch, 255);
          展开testch2:
            - testch2 0x00aff9f0 "你好烫烫烫烫
            " unsigned char [256]
            [0] 196 ‘?’ unsigned char
            [1] 227 ‘?’ unsigned char
            [2] 186 ‘?’ unsigned char
            [3] 195 ‘?’ unsigned char
            [4] 204 ‘?’ unsigned char
            [5] 204 ‘?’ unsigned char
            [6] 204 ‘?’ unsigned char
            [7] 204 ‘?’ unsigned char
            [8] 204 ‘?’ unsigned char
            [9] 204 ‘?’ unsigned char
            [10] 204 ‘?’ unsigned char
            [11] 204 ‘?’ unsigned char
            [12] 10 ’
            ’ unsigned char
            [13] 0 unsigned char

            Byte13值为0,程序输出的testch信息到这里终止。


    然后,我们分析testch输出的信息内容:

      GB2312规定对匹配的每个字符采用两个字节表示,在VS2010编译器中可以这么认为(与GB2312标准定义有出入):
        当前字节值为0-128时,采用国际Ascll码表方式计算,当前字节信息会以Ascll码表对应符显示;
        当前字节值大于或等于129时,后面的一个字节与当前字节被认为是一个GB2312编码匹配(采用两个字节位数合并成一个16位数字(低字节在低8位,高字节在高8位)),数字值如果在GB2312编码内,将显示GB2312中的对应信息,否则(数字值如果不在GB2312编码内)按照单个字节显示。


    GB2312标准:


      GB2312是中国主要官方字符集的注册名称,用于简体中文字符。GB缩写为国家标准,由中国国家标准总局1980年发布,1981年5月1日开始使用。GB2312编码共收录汉字6763个,其中一级汉字3755个,二级汉字3008个。

      GB2312规定对收录的每个字符采用两个字节表示,第一个字节为“高字节”,对应94个区;第二个字节为“低字节”,对应94个位,所以它的区位码范围是:0101-9494。区号和位号分别加上0xA0就是GB2312编码。例如最后一个码位是9494,区号和位号分别转换成十六进制是5E5E,0x5E+0xA0=0xFE,所以该码位的GB2312编码是FEFE。

      GB2312编码范围为0xA1A1—0xFEFE,其中汉字的编码范围为0xB0A1-0xF7FE,第一字节0xB0-0xF7(对应区号:16——87),第二个字节0xA1-0xFE(对应位号:01—94)。


    输出乱码原因:


      当我们使用字符数组存储信息并且没有做字符串结尾(最后一个字节置为空字符)时,将会发生“内存访问越位”的情况,因为,VS2010编译器会自动把未使用的栈内存空间按字节全部初始化为0xCC(无符号204),当两个字节都为0xCC时,显示为GB2312编码中的“烫”汉字。


    整数存储GB2312中文编码:


    unsigned short:

      在32位编译器中,一个unsigned short类型占用2个字节,我们可以通过unsigned short数组保存数据,并输出“你好”:
        unsigned short sho[3] = {58308,50106,0};
        printf("%s", sho);
        第一个值:58308 转成二进制数字为 1110 0011,1100 0100,中文“你”;
        第二个值:50106 转成二进制数字为 1110 0011,1011 1010,中文“好”;
        第三个值:作为空字符使用。

        位数顺序:左高右低。


    unsigned int:

      在32位编译器中,一个unsigned int类型占用4个字节,输出“你好”:
        unsigned int sho[2] = {3283805124,0};
        printf("%s", sho);
        第一个值:3283805124 转成二进制数字为 1100 0011 1011 1010,1110 0011 1100 0100‬,中文“你好”;
        第二个值:作为空字符使用。

        使用unsigned int类型存储GB2312数据时,采用2个字节为一组,3、4字节(中文“好”)在左,1、2字节(中文“你”)在右, 组内顺序也是左高右低。


    long long:

      在大部分编译器中,一个long long类型占用8个字节,输出“你好呀”:
        long long sho = 208708629619652;
        printf("%s", &sho);
        参数值:208708629619652 或 十六进制 0xBDD1C3BAE3C4 转成二进制数字为:
        1011 1101 1101 0001,1100 0011 1011 1010,1110 0011 1100 0100,中文“你好呀”;

        使用long long类型类型存储GB2312数据时,存储形式与int相同。示例中我们只输出3个GB2312字符,6、7字节为空字符使用。

      在这里我们可以看出使用无符号类型和有符号类型输出的结果相同,大部分示例中采用无符号类型只是为了方便参考数据。


    Uncode:


      在非 Unicode 环境下,由于不同国家和地区采用的字符集不一致,很可能出现无法正常显示所有字符的情况。微软公司使用了代码页(Codepage)转换表的技术来过渡性的部分解决这一问题,即通过指定的转换表将非 Unicode 的字符编码转换为同一字符对应的系统内部使用的 Unicode 编码。
    MultiByteToWideChar是一种windows API 函数,该函数映射一个字符串到一个宽字符(Unicode)的字符串。


    UTF-8:


      UTF-8是针对Unicode的一种可变长度字符编码,它可以用来表示Unicode标准中的任何字符,UTF-8将每个Unicode字符编码为1到4个八位字节的可变数字,其中八位字节的数目取决于分配给Unicode字符的整数值。这是对Unicode文档的有效编码,主要使用US-ASCII字符,因为它将范围在U + 0000到U + 007F之间的每个字符表示为一个八位字节。


    整数存储UTF-8中文编码:


    long long:

      由于UTF-8字符集存在字节不确定因素,直接使用long long类型输出“你好”:
        system(“chcp 65001”); //在VS2010编译器中,我们选择向控制台输出UTF-8信息
        long long sho = 208520219770340;
        printf("%s", &sho);
        参数值:208520219770340 或十六进制 0xBDA5E5A0BDE4 转成二进制数字为:
    ‬    1011 1101 1010 0101 1110 0101, 1010 0000 1011 1101 1110 0100‬,中文“你好”;

        示例中“你”、“好”分别占用三个字节,6、5、4字节(中文“好”)在左,3、2、1字节(中文“你”)在右, 组内顺序也是左高右低。

    展开全文
  • 第二章 编码与组合 第三章 布莱叶盲文与二元编码 第四章 手电筒剖析 第五章 绕过拐弯的通信 第六章 电报机与继电器 第七章 十进制记数法 第八章 其他进位制记数法 第九章 二进制数 第十章 逻辑与开关 第十...
  •   &...计算机编码随处可见,各种编码问题更是...我们还是先对计算机编码简单了解下吧。     

           在计算机中编码随处可见,各种编码问题更是层出不穷,那么到底什么是编码?到底有哪些编码?编码的重要性到底如何?我们还是先对计算机编码(中文编码)简单了解下吧。

           计算机编码是计算机内部表示字符或是数字的方式。由于计算机只能处理0 1 二进制数据,因此计算机编码就是利用二进制0 1来表示字符或是数字的。计算机编码的最小单位是位 bit,接着就是字节 Byte,一个字节=8位。1 KB=1024 Byte; 1 MB=1024 KB; 1 GB=1024 MB ; 1TB=1024 GB。常用的计算机编码主要有计算机编码主要有ASCII GB2312 GBK BIG5 GB18030 Unicode UTF-8 等等,接下来,我们就来简单了解了解吧。

           ASCII 美国信息交换标准代码 是基于拉丁字母的一套计算机编码系统,它主要用于显示现代英语和其他西欧语言,是现今最通用的单字节编码系统

           ASCII可以分为标准ASCII码以及扩展ASCII码。

           标准ASCII码也叫基础ASCII码,使用7位二进制数(最后一位二进制为0)来表示所有的大写和小写字母,数字0 到9、标点符号, 以及在美式英语中使用的特殊控制字符。0~31及127(共33个)是控制字符或通信专用字符(其余为可显示字符)。注意,在标准ASCII中,其最高位(b7)用作奇偶校验位。所谓奇偶校验,是指在代码传送过程中用来检验是否出现错误的一种方法,一般分奇校验和偶校验两种。奇校验规定:正确的代码一个字节中1的个数必须是奇数,若非奇数,则在最高位b7添1;偶校验规定:正确的代码一个字节中1的个数必须是偶数,若非偶数,则在最高位b7添1。

           后128个称为扩展ASCII码。许多基于x86的系统都支持使用扩展ASCII。扩展ASCII 码允许将每个字符的第8 位用于确定附加的128 个特殊符号字符、外来语字母和图形符号,扩展ASCII并不是国际标准

           ISO-8859-1编码是单字节编码,向下兼容ASCII,其编码范围是0x00-0xFF,0x00-0x7F之间完全和ASCII一致,0x80-0x9F之间是控制字符,0xA0-0xFF之间是文字符号。此字符集支持部分于欧洲使用的语言,包括阿尔巴尼亚语、巴斯克语、布列塔尼语、加泰罗尼亚语、丹麦语、荷兰语、法罗语、弗里西语、加利西亚语、德语、格陵兰语、冰岛语、爱尔兰盖尔语、意大利语、拉丁语、卢森堡语、挪威语、葡萄牙语、里托罗曼斯语、苏格兰盖尔语、西班牙语及瑞典语。英语虽然没有重音字母,但仍会标明为ISO/IEC 8859-1编码。除此之外,欧洲以外的部分语言,如南非荷兰语、斯瓦希里语、印尼语及马来语、菲律宾他加洛语等也可使用ISO/IEC 8859-1编码。法语及芬兰语本来也使用ISO/IEC 8859-1来表示。但因它没有法语使用的 œ、Œ、Ÿ 三个字母及芬兰语使用的 Š、š、Ž、ž ,故于1998年被ISO/IEC 8859-15所取代。(ISO 8859-15同时加入了欧元符号)

           ISO-8859-1收录的字符除ASCII收录的字符外,还包括西欧语言、希腊语、泰语、阿拉伯语、希伯来语对应的文字符号。因为ISO-8859-1编码范围使用了单字节内的所有空间,在支持ISO-8859-1的系统中传输和存储其他任何编码的字节流都不会被抛弃。换言之,把其他任何编码的字节流当作ISO-8859-1编码看待都没有问题。这是个很重要的特性,MySQL数据库默认编码是Latin1就是利用了这个特性。ASCII编码是一个7位的容器,ISO-8859-1编码是一个8位的容器。HTML 4.01 支持 ISO 8859-1 (Latin-1) 字符集。ISO-8859-1 的较低部分(从 1 到 127 之间的代码)是最初的 7 比特 ASCII。ISO-8859-1 的较高部分(从 160 到 255 之间的代码)全都有实体名称。这些符号中的大多数都可以在不进行实体引用的情况下使用,但是实体名称或实体编号为那些不容易通过键盘键入的符号提供了表达的方法。

           GB2312 信息交换用汉字编码字符集是由中国国家标准总局1980年发布,1981年5月1日开始实施的一套国家标准。GB2312编码适用于汉字处理、汉字通信等系统之间的信息交换,通行于中国大陆;新加坡等地也采用此编码。中国大陆几乎所有的中文系统和国际化的软件都支持GB2312。基本集共收入汉字6763个和非汉字图形字符682个。GB 2312标准共收录6763个汉字,其中一级汉字3755个,二级汉字3008个;同时,GB 2312收录了包括拉丁字母、希腊字母、日文平假名及片假名字母、俄语西里尔字母在内的682个全角字符。整个字符集分成94个区,每区有94个位。每个区位上只有一个字符,因此可用所在的区和位来对汉字进行编码,称为区位码。把换算成十六进制的区位码加上2020H,就得到国标码。国标码加上8080H,就得到常用的计算机机内码。

           在使用GB2312的程序中,通常采用EUC储存方法,以便兼容于ASCII。浏览器编码表上的“GB2312”,通常都是指“EUC-CN”表示法。 每个汉字及符号以两个字节来表示。第一个字节称为“高位字节”(也称“区字节)”,第二个字节称为“低位字节”(也称“位字节”)。 高位字节使用了0xA1-0xF7(把01-87区的区号加上0xA0),低位字节使用了0xA1-0xFE(把01-94加上 0xA0)。 由于一级汉字从16区起始,汉字区的“高位字节”的范围是0xB0-0xF7,低位字节的范围是0xA1-0xFE,占用的码位是 72*94=6768。其中有5个空位是D7FA-D7FE。 例如“啊”字在大多数程序中,会以两个字节,0xB0(第一个字节) 0xA1(第二个字节)储存。区位码=区字节+位字节(与区位码对比:0xB0=0xA0+16,0xA1=0xA0+1)。

           GBK 向下与 GB 2312 编码兼容,向上支持 ISO 10646.1国际标准,是前者向后者过渡过程中的一个承上启下的产物。ISO10646是国际标准化组织 ISO公布的一个编码标准,即 Universal Multilpe-Octet Coded Character Set(简称UCS),大陆译为《通用多八位编码字符集》,台湾译为《广用多八位元编码字元集》,它与Unicode组织的Unicode编码完全兼容。ISO10646.1 是该标准的第一部分《体系结构与基本多文种平面》 GBK编码,是在GB2312-80标准基础上的内码扩展规范,使用了双字节编码方案,其编码范围从8140至FEFE(剔除xx7F),共23940个码位,共收录了21003个汉字,完全兼容GB2312-80标准,支持国际标准ISO/IEC10646-1和国家标准GB13000-1中的全部中日韩汉字,并包含了BIG5编码中的所有汉字。GBK编码方案于1995年10月制定,1995年12月正式发布,目前中文版的WIN95、WIN98、WINDOWS NT以及WINDOWS 2000、WINDOWS XP、WIN 7等都支持GBK编码方案。

           很多人在使用过程中,发现字不够用,因为目前大家使用的主要是GB编码字库,此编码标准只收录了6763个常用汉字,而GB字库以外大量汉字,只能通过方正女娲补字软件拼字或其它造字程序补字。尽管补出的汉字在字形上满足需要,但在字体风格、大小、结构方面难以协调统一,而采用手工贴图的方式补字,更不雅观。进而言之,如果用户建立信息系统,或需要查询新闻、出版内容时,靠补字是无法实现的。方正开发的GBK字库,将极大地缓解缺字现象。

           从GB字库扩充到GBK字库,增加了1万4千多字。北大方正从1996年投入大量人力,开始做黑、宋、仿、楷GBK字库,并于1998年4月成为第一家通过国家权威部门组织的GBK字库鉴定的专业厂商。到现在为止,北大方正已将全部字体转换成GBK字库,共46款,其中18款字数达21003个,是拥有GBK字库款数最多的厂商。

           ISO10646 是一个包括世界上各种语言的书面形式以及附加符号的编码体系。其中的汉字部分称为“CJK 统一汉字”(C 指中国,J 指日本,K 指朝鲜)。而其中的中国部分,包括了源自中国大陆的 GB 2312、GB 12345、《现代汉语通用字表》等法定标准的汉字和符号,以及源自台湾的 CNS 11643 标准中第 1、2 字面(基本等同于 BIG-5 编码)、第 14 字面的汉字和符号。

           BIG5又称大五码或五大码,1984年由台湾财团法人信息工业策进会和五间软件公司宏碁 (Acer)、神通 (MiTAC)、佳佳、零壹 (Zero One)、大众 (FIC)创立,故称大五码。 Big5码的产生,是因为当时台湾不同厂商各自推出不同的编码,如倚天码、IBM PS55、王安码等,彼此不能兼容;另一方面,台湾政府当时尚未推出官方的汉字编码,而中国大陆的GB2312编码亦未有收录繁体中文字。 Big5字符集共收录13,053个中文字,该字符集在中国台湾使用。耐人寻味的是该字符集重复地收录了两个相同的字:“兀”(0xA461及0xC94A)、“嗀”(0xDCD1及0xDDFC)。 Big5码使用了双字节储存方法,以两个字节来编码一个字。第一个字节称为“高位字节”,第二个字节称为“低位字节”。高位字节的编码范围0xA1-0xF9,低位字节的编码范围0x40-0x7E及0xA1-0xFE。 尽管Big5码内包含一万多个字符,但是没有考虑社会上流通的人名、地名用字、方言用字、化学及生物科等用字,没有包含日文平假名及片假字母。 例如台湾视“着”为“著”的异体字,故没有收录“着”字。康熙字典中的一些部首用字(如“亠”、“疒”、“辵”、“癶”等)、常见的人名用字(如“堃”、“煊”、“栢”、“喆”等) 也没有收录到Big5之中。

           GB18030的全称是GB18030-2000《信息交换用汉字编码字符集基本集的扩充》,是我国政府于2000年3月17日发布的新的汉字编码国家标准,2001年8月31日后在中国市场上发布的软件必须符合本标准。GB 18030字符集标准的出台经过广泛参与和论证,来自国内外知名信息技术行业的公司,信息产业部和原国家质量技术监督局联合实施。 GB 18030字符集标准解决汉字、日文假名、朝鲜语和中国少数民族文字组成的大字符集计算机编码问题。该标准的字符总编码空间超过150万个编码位,收录了27484个汉字,覆盖中文、日文、朝鲜语和中国少数民族文字。满足中国大陆、香港、台湾、日本和韩国等东亚地区信息交换多文种、大字量、多用途、统一编码格式的要求。并且与Unicode 3.0版本兼容,填补Unicode扩展字符字汇“统一汉字扩展A”的内容。并且与以前的国家字符编码标准(GB2312,GB13000.1)兼容。

           GB 18030标准采用单字节、双字节和四字节三种方式对字符编码。 单字节部分使用0×00至0×7F码(对应于ASCII码的相应码)。 双字节部分,首字节码从0×81至0×FE,尾字节码位分别是0×40至0×7E和0×80至0×FE。 四字节部分采用GB/T 11383未采用的0×30到0×39作为对双字节编码扩充的后缀,这样扩充的四字节编码,其范围为0×81308130到0×FE39FE39。其中第一、三个字节编码码位均为0×81至0×FE,第二、四个字节编码码位均为0×30至0×39。 按照程序员的称呼,GB2312、GBK到GB18030都属于双字节字符集(DBCS)。

    展开全文
  • 计算机基础书,用生活的例子让你轻松理解计算机运行的原理。
  • 计算机中编码

    2019-04-26 22:28:57
    目录 1.ASCII码 2.GB2312 国标 3.每个国家都有自己的编码 ...6.计算机系统通用的字符编码工作方式: 1.ASCII码 ASCII码 最多能表示127个英文字符 '0' 48 'A' 65 'a' 97 '1' 49 'B' 'b' 98 '2' 50 '3' 51 '...

    目录

    1.ASCII码

    2.GB2312  国标

    3.每个国家都有自己的编码

    4.Unicode码  万国码

    5.UTF-8

    6.计算机系统通用的字符编码工作方式:


    1.ASCII码

    ASCII码 最多能表示127个英文字符

    '0'  48   'A'  65    'a'   97
    '1'  49   'B'        'b'   98
    '2'  50
    '3'  51
    '9'  57

    依次类推

    标准键盘:101键盘 有101个键 能敲出来的字符都算

    从键盘输入的每一个键都对应一个ASCII码

    只能表示我们所说的127个英文字符

    问题是汉字,汉字太多,就需要扩展跟多的位数来增加数值的范围

    2.GB2312  国标

    每个汉字两个字节    一个字节占8位

    3.每个国家都有自己的编码

    混乱

    4.Unicode码  万国码

    冗余,太多了

    5.UTF-8

    把Unicode字符根据不同的数字大小编码成1-6个字节

    英文字母 1个字节

    汉字 3个字节

    生僻的字符 4-6个字节

    文本包\大量的英文字符 用UTF-8节省空间


    这是一条华丽的分割线


    6.计算机系统通用的字符编码工作方式:

    计算机内存:Unicode码

    保存到硬盘上或者是传输的时候:UTF-8

    保存到硬盘上也可以用Unicode 但是太占内存了

    (1)用记事本编辑的时候,从文件读取的 UTF-8 字符被转换为 Unicode 字符到内存里,编辑完成后,保存的时候再把 Unicode 转换为 UTF-8 保存到文件:rw-file-utf-8
    (2)浏览网页的时候,服务器会把动态生成的 Unicode 内容转换为 UTF-8 再传输到浏览器:web-utf-8
           所以你看到很多网页的源码上会有类似的信息,表示该网页正是用的 UTF-8 编码
    首先要搞清楚,字符串在 Python 内部的表示是 unicode 编码,因此,在做编码转换时,通常需要以 unicode 作为中间编码,即先将其他编码的字符串解码(decode)成 unicode,再从 unicode 编码(encode)成另一种编码。
    1.decode:其它码-->unicode
    decode 的作用是将其他编码的字符串转换成 unicode 编码,如 str1.decode(‘gb2312’),表
    示将 gb2312 编码的字符串转换成 unicode 编码。
    2.encode:unicode-->其它码
    encode 的作用是将 unicode 编码转换成其他编码的字符串,如 str2.encode(‘gb2312’),表
    示将 unicode 编码的字符串转换成 gb2312 编码

    先编码再解码

     

     

     

     

     

    展开全文
  • 理清计算机汉字编码问题(上)

    千次阅读 2019-05-05 09:38:10
    ASCII(American Standard Code for Information Interchange:美国信息交换标准代码)是基于拉丁字母的一套电脑编码系统,主要用于显示现代英语和其他西欧语言。它是现今最通用的信息交换标准,并等同于国际标准ISO/...
  • epub电子书格式,中文版。排版清晰, Kindle/手机可用
  • 编码---隐匿在计算机软硬件背后的语言.上》 高清 PDF 程序员必读经典书籍之一
  • 计算机中编码问题

    千次阅读 2021-03-25 10:58:13
    计算机编码 二. 计算机编码分类 1. ASCII编码 2. GBK编码 3. UTF-8编码 三.计算机系统的编码应用 四. 编码问题 写代码的时候经常会碰到编码问题,一直以来对这个编码不是太了解,今天就来学下一下。 gbk...
  • 本书用大量的篇幅讲述了与计算机原理相关的各种编码方法,并通过数字逻辑电路(包括逻辑与开关、逻辑门电路与触发器、二进制加法器等)以及存储器、微处理器的形成、组织及发展阐述了编码的实现。此外,本书还涉及到...
  • 汉字在计算机上的表达方式

    千次阅读 2019-10-22 19:37:37
    一个汉字在计算机中占有2个字符 西文字符的ASCII码表示西文字符是,用的是7位的ASCII码,为了在计算机中存储,最高位(第八位)默认为0,所以可以表示27个不同的字符;扩展的ASCII码,使用的第八位,不默认为0...
  • 计算机中的字符编码(Unicode UTF-8 GBK) 计算机的字符都是哪里定义的 答: 字符集里定义的; 每个国家都有自己的语言, 每种语言又对应有很多不同的字符; 像英语只需要 100 多个字符就够了, 而中文则有非常多的字符...
  • 前言 你是否有过这样的疑惑? 1.我的代码里面中文注释自己电脑上是可以正常显示的,但是换了别的电脑出现了乱码。 2.想写跨平台程序,但是Windows上明明正常的,...不知道计算机是如何显示编码的 7.分不清unic
  • 《信息交换用汉字编码字符集》是由中国国家标准总局1980年发布,1981年5月1日开始实施的一套国家标准,标准号是GB2312-1980。GB2312编码适用于汉字处理、汉字通信等系统之间的信息交换,通行于中国大陆;新加坡等地...
  • 汉字在计算机中的表示

    万次阅读 2017-03-24 10:28:06
    汉字在计算机中的表示 一、一个汉字在计算机中占两个字节的位置  西文字符的ASCII码表示西文字符是,用的是7位的ASCII码,为了在计算机中存储,最高位(第八位)默认为0,所以可以表示27个不同的字符;扩展的...
  • 有一天突发奇想,我们中文在计算机编码是怎么样的呢?查了一些资料(参考百度),做出实际应用,该应用是由C语言实现,压缩包里是一个codeblock工程文件夹,debug有exe文件。打开后是个黑盒,输入你要输入的中文...
  • 编码问题一直困扰着开发人员,尤其Java更加明显,因为Java是跨平台语言,不同平台之间编码之间的切换较多。本文将向你详细介绍Java中编码问题出现的根本原因,你将了解到:Java经常遇到的几种编码格式的区别;...
  • 计算机中的文字编码

    千次阅读 2016-12-03 21:25:42
    计算机中,储存数据的实际形式是”010101”这样的代码。那像这样只由0和1组成的数据,如何转化为有意义的代码呢?答案便是为这些数据编码。 n位二进制数可以组合成2的n次方个不同的信息,给每个信息规定一个具体...
  • 中文编码

    千次阅读 2018-10-06 12:02:52
    一开始是为了和计算机进行沟通,出现了英文的ASCII码;后来因为各个国家语言不同,也有自己的一套编码格式,所以出现了ISO8859系列。Unicode等 1.2.编码的种类: ①ASCII:用一个字节的7位进行表示,只能表示128个...
  • 中文编码问题分析及几种乱码场景

    千次阅读 2019-02-15 17:36:55
    计算机中存储信息的最小单元是一个字节(byte),即8个bit,所以能表示的字符范围是0~255个。 ◎ 人类要表示的符号太多,无法用一个字节来完全表示。 要解决这个矛盾必须要有一个新的数据结构char,从char到byte...
  • 解决python的中文字符编码问题

    万次阅读 2018-07-15 17:00:23
    摘要:最近做自然语言处理相关的项目,发现中文编码的问题实在需要好好学习下,我用python为例,简单介绍下python编程时如何处理好中文编码的问题。
  • 有关编码的基础知识: 1.位 bit————>最小的单元 字节 byte————>机器语言的单位 1byte=8bits 1KB=1024byte 1MB=1024KB 1GB=1024MB 1TB=1024GB 2. 二进制 binary 八进制 octal 十进制 decimal ...
  • 计算机编码格式总结

    千次阅读 2019-06-30 17:40:00
    我们知道,计算机内部,所有信息最终都是一个二进制值。每一个二进制位(bit)有0和1两种状态,因此八个二进制位就可以组合出256种状态,这被称为一个字节(byte)。也就是说,一个字节一共可以用来表示256种不同的...
  • 最早的计算机在设计时采用8个比特(bit)作为一个字节(byte),所以,一个字节能表示的最大的整数就是255(二进制11111111=十进制255),如果要表示更大的整数,就必须用更多的字节。比如两个字节可以表示的最大...
  • 计算机中编码方式

    千次阅读 2016-09-30 20:39:34
    在计算机中,所有数据存储和运算都要用到二进制。例如,像a、b、c这样的字母,另外还有数学,以及一些常用的符号,等等。。。都要将他们以二进制的方式去存储,不同的人有不同的存储方式,这样大家相互通信就会发生...
  • gb2312:ascii无法表示汉字,GB2312是对 ASCII 的中文扩展,即国标2312,GB2312标准共收录6763个汉字,其中一级汉字3755个,二级汉字3008个;同时收录了包括拉丁字母、希腊字母、日文平假名及片假名字母、俄语西里尔...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 105,826
精华内容 42,330
关键字:

汉字在计算机中是如何编码的