也谈些编码的事情

介绍下编码基础知识

1 GB2312-80

GB 2312 或 GB 2312-80 是中国国家标准简体中文字符集,全称《信息交换用汉字编码字符集·基本集》,又称GB0,由中国国家标准总局发布,1981年5月1日实施。GB2312编码通行于中国大陆;新加坡等地也采用此编码。中国大陆几乎所有的中文系统和国际化的软件都支持GB 2312。
GB 2312标准共收录6763个汉字,其中一级汉字3755个,二级汉字3008个;同时收录了包括拉丁字母、希腊字母、日文平假名及片假名字母、俄语西里尔字母在内的682个字符。

  • GB 2312的出现,基本满足了汉字的计算机处理需要,它所收录的汉字已经覆盖中国大陆99.75%的使用频率。
  • 对于人名、古汉语等方面出现的罕用字,GB 2312不能处理,这导致了后来GBK及GB 18030汉字字符集的出现。

GB2312对任意一个图形字符都采用两个字节表示,并对所收汉字进行了“分区”处理,每区含有94个汉字/符号,分别对应第一字节和第二字节。这种表示方式也称为区位码。

  • 01-09区为特殊符号。
  • 16-55区为一级汉字,按拼音排序。
  • 56-87区为二级汉字,按部首/笔画排序。

10-15区及88-94区则未有编码。
   GB2312的编码范围为2121H-777EH,与ASCII有重叠,通行方法是将GB码两个字节的最高位置1以示区别。

特征:

双字节,定长
  包括一二级汉字和9区符号
  高位低位一样,都是从0xA1~0xFE
  汉字编码范围是0xB0A1~0xF7FE

2 GBK
GBK即汉字内码扩展规范,K为汉语拼音 Kuo Zhan(扩展)中“扩”字的声母。英文全称Chinese Internal Code Specification。
GBK共收入21886个汉字和图形符号,包括:

  • GB2312中的全部汉字、非汉字符号。
  • BIG5中的全部汉字。
  • 与ISO 10646相应的国家标准GB13000中的其它CJK汉字,以上合计20902个汉字。
  • 其它汉字、部首、符号,共计984个。

GBK向下与GB2312 完全兼容,向上支持ISO 10646国际标准,在前者向后者过渡过程中起到的承上启下的作用。

GBK 采用双字节表示,总体编码范围为8140-FEFE之间,首字节在81-FE之间,尾字节在40-FE之间,剔除XX7F一条线。GBK编码区分三部分:

  • 汉字区 包括

GBK/2:OXBOA1-F7FE, 收录GB2312汉字6763个,按原序排列;
GBK/3:OX8140-AOFE,收录CJK汉字6080个;
GBK/4:OXAA40-FEAO,收录CJK汉字和增补的汉字8160个。

  • 图形符号区 包括

GBK/1:OXA1A1-A9FE,除GB2312的符号外,还增补了其它符号
GBK/5:OXA840-A9AO,扩除非汉字区。

  • 用户自定义区

GBK区域中的空白区,用户可以自己定义字符。

特征:

双字节,定长
 兼容GB2312
 编码范围:0x8140~0xFEFE
 所有字符都可以映射到Unicode2.0


3 GB18030 - 2000

GB 18030,全称:国家标准GB 18030-2005《信息技术中文编码字符集》,是中华人民共和国现时最新的内码字集,是GB 18030-2000《信息技术信息交换用汉字编码字符集基本集的扩充》的修订版。
GB 18030与GB 2312-1980完全兼容,与GBK基本兼容,支持GB 13000及Unicode的全部统一汉字,共收录汉字70244个。

  • 与 UTF-8 相同,采用多字节编码,每个字可以由1个、2个或4个字节组成。
  • 编码空间庞大,最多可定义161万个字符。
  • 支持中国国内少数民族的文字,不需要动用造字区。
  • 汉字收录范围包含繁体汉字以及日韩汉字

GB18030 编码是一二四字节变长编码。

    • 单字节,其值从0到0x7F,与 ASCII 编码兼容。
    • 双字节,第一个字节的值从0x81到0xFE,第二个字节的值从0x40到0xFE(不包括0x7F),与 GBK标准基本兼容。
    • 四字节,第一个字节的值从0x81到0xFE,第二个字节的值从0x30到0x39,第三个字节从0x81到0xFE,第四个字节从0x30到0x39。
    • 收藏少数民族字型

特征:

不定长,包含二字节部分和四字节部分

二字节部分兼容GBK

四字节部分是扩充字符,第一第三字节范围:0x81~0xFE,第二第四字节范围:0x30~0x39

4 Unicode
  包括所有字符字型
  各地区语言都可与之建立映射
  异种语言的转换是通过Unicode来完成的
  汉字从4E00开始

  综上所述gb2312编码字符最少,这样会引一些问题,很常见的就是乱码问题。

  举例:

  "珅、堃" 这两个字在gb2312编码里是没有的。这样在使用gb2312编码的页面里就会出问题了,可能你在页面中输入是正确的但传输到了服务器端就会乱码,而且他可能会影响下面的字也出现乱码(字节码组合问题)。

时间: 2024-11-05 22:36:52

也谈些编码的事情的相关文章

谈一谈商品编码的问题

如题:今天谈一谈商品编码的问题,我们不是完全从物流和商品本身的角度去谈商品该怎么编码才符合国际标准,EAN,UPC啥啥啥怎么样的.我们从计算机程序设计,电商,数据库存储的角度看一看商品编码,首先商品有哪些编码,然后这些编码和商品的关系,在然后这些编码该怎么使用.要从电商的角度了解商品,马上想到的可能是淘宝,天猫,京东,亚马逊等他们的商品是怎么样子,是怎么存储的. 这些这么成熟的电商完全可以参考和借鉴.关于商品这个话题还是太大,因为商品本身设计的东西太多了,不同活动先不同的价格,多规格商品,不同的

多研究些架构,少谈些框架

论微服务架构的核心概念 微服务架构和SOA区别 微服务现在辣么火,业界流行的对比的却都是所谓的Monolithic单体应用,而大量的系统在十几年前都是已经是分布式系统了,那么微服务作为新的理念和原来的分布式系统,或者说SOA(面向服务架构)是什么区别呢? 我们先看相同点: 需要Registry,实现动态的服务注册发现机制: 需要考虑分布式下面的事务一致性,CAP原则下,两段式提交不能保证性能,事务补偿机制需要考虑: 同步调用还是异步消息传递,如何保证消息可靠性?SOA由ESB来集成所有的消息:

当我谈《王者荣耀》时我谈些什么

序言 2016/09/09是我入职xxx公司的第一天,进入xx项目组,6名成员,项目需求调研已结束-开发初期... 一.资源 一场游戏大多时候开始就能预测出来输赢了,怎么看的?选人啊!!做项目也是如此,成员元素的配置是项目能否长期持续顺利开展的重要因素之一.上图中诸葛亮输出爆发很高,但是5个诸葛亮在游戏中就很强了吗?这个吃技能及cd,皮脆的英雄对面一波卡技能间隙冲脸轻松干掉你...项目组中也是,在专业技能之外,性格因素,持续学习能力.沟通能力等也是资源配置中的重要指标. 二.规则.样板.复查 2

微信产品经理教你做产品:少谈些主义,多做些需求

微信产品经理邹剑波围绕"需求",谈如何做好产品,他做产品经理的态度:做产品,要自己开心.以下是他的演讲要点提炼. 一.思考需求 1.需求的本质是动机,而不是需要. 如果有人提出,"我想要付钱,出现在附近的人的最顶部",其实他是寂寞了,想要获取关注.你给他一个功能"10块钱置顶",结果他花了10块钱置顶之后,他还是寂寞,因为他真正的问题是丑,所以他真正的需求是一款滤镜或者一个面具.置顶是他的需求么?不是,这是他的需要,他太丑,没有人找他,他本质的需

多研究些架构,少谈些框架(4):架构师是技术的使用者

架构师是技术的使用者而不是信徒 我承认我是标题党, 为什么要写这篇充满争议的文章?目前架构师这个职位特别火热,程序员的目标都是成为一个令人尊敬的架构师.但是我们真的理解架构师应该做些什么?很多人把架构师和框架师等同起来,认为研究框架多的才是架构师 下面说的情况请勿对号入座. 盲目的追新:技术人员的喜好往往是什么技术流行就追什么技术.现在的技术发展快,前后端不断涌现各种框架,我们恨不得把这些框架都用在自己的项目里才行,要不然怎么好意思和别人打招呼啊. 我亲身经历,有个技术人员一定要把原来单元测试框

浅谈Hex编码算法

一.什么是Hex 将每一个字节表示的十六进制表示的内容,用字符串来显示. 二.作用 将不可见的,复杂的字节数组数据,转换为可显示的字符串数据 类似于Base64编码算法 区别:Base64将三个字节转换为四个字符,Hex将三个字节转换为六个字节 三.应用场景 在XML,JSON等文本中包含不可见数据(二进制数据)时使用 四.使用 1.将字节数组转换为字符串 1 /** 2 * 将字节数组转换为字符串 3 * 一个字节会形成两个字符,最终长度是原始数据的2倍 4 * @param data 5 *

浅谈URLEncoder编码算法

一.为什么要用URLEncoder 客户端在进行网页请求的时候,网址中可能会包含非ASCII码形式的内容,比如中文. 而直接把中文放到网址中请求是不允许的,所以需要用URLEncoder编码地址, 将网址中的非ASCII码内容转换成可以传输的字符 不会被编码的内容 1.大写字母A-Z 2.小写字母a-z 3.数字 0-9 4.标点符 - _ . ! ~ * ' (和 ,) 二.编码原理 1.将需要转换的内容(ASCII码形式之外的内容),用十六进制表示法转换出来,并在之前加上%开头 eg:  0

浅谈字符编码

前言 我们知道,.NET Framework 在内部将文本(string)存储为 Unicode UTF-16.在 .NET Framework Base Class Library 中,System.Text.Encoding 类及其派生类提供了对字符编码的支持.Encoding 类的静态GetEncodings 方法返回包含所有编码的数组. 源程序代码 让我们写个 C# 程序来查看一下 BCL 所支持的所有字符编码吧.下面就是 EncodingTester.cs: 01: using Sys

【拿来主义】当我们谈WEB缓存的时候,我们在谈些什么?

第一部分 Web缓存是什么 场景1:测试妹子测功能时会说为什么我的浏览器的显示乱七八糟,我的界面怎么跟别人浏览器上不一致?旁边的人会提醒说:清下缓存试试. 场景2:开发改了代码,上了环境,发现不生效,这时候首先就是清缓存,清了浏览器缓存发现还是不行,再检查,发现是反向代理缓存. 那么,当我们谈WEB缓存的时候,我们说的是什么?什么地方可以缓存?什么时候用什么缓存?使用不当会带来什么问题,我们怎么避免? 会不会傻傻分不清楚,那我们就来理一理,看看web缓存究竟是什么? 缓存:缓存就是把数据或者我们