GB2312编码(为什么要加2020H、8080H,外码→内码→交换码→字形码)
为什么要加上2020H和8080H?
区位码、内码、国标码怎么转换非常简单,但是令人迷惑的是为什么要那么转换?这种转换不可能平白无故地那样转换!
我搜索很多资料,找到最好的解释,总结如下:
首先,注意到一点,GB2312虽说是对中文编码,但是里面有对26个英文字母和一些特殊符号的编码,按理说这和ASCII重合的部分应该无需设置,沿用ASCII中不就行了?但是当时在制定GB2312之前,就决定覆盖掉ASCII中符号和英文字母部分,所以将其中的英文字母和符号重新编入GB2312中。而对于ASCII中前32个控制字符则继续沿用。所以保留前32字符,就需要将汉字编码向后偏移32,十六进制20H,这也就是区位码要加上20H得到国标码,这就是GB2312的编码规范。
而这样产生一个弊端,某些早期用ASCII码编码的英文文章无法打开,一打开就是乱码,也就是说应该要兼容早期ASCII码而不是覆盖它!为了解决这个问题,将字节的最高位设为1,因为ASCII中使用7位,最高位为0。这样就区分开了ASCII和GB2312。这也是为什么要加上8080H。 其实我们说国标码才是GB2312的规范编码,后来的内码是微软为了解决冲突问题而采用的方式,本质上是修改了GB2312的编码标准,而这种方法最后产生的编码最后就被一些教科书称为内码
【扩展】
外码:又称输入码,我们平常用的拼音输入和五笔输入法所敲打的字母。
内码:计算机存储信息是二进制的,输入的汉字要转化成二进制的形式,它们的集合就叫字符集。
交换码:又称国标码,是和别的计算机交换信息时使用的编码。
字形码:又称汉字字模,把二进制的汉字编码还原为可视的图形,它们的集合又叫字库。
英文的字母只有26个,可以直接用键盘表示,直接通过译码电路转换为内码,但有些国家的拼音字母不止26个,要么制作一个特殊的键盘,要么和汉字那样的输入一串符号来表示一个字符,这一串符号就叫输入码。
先说拼音字母,同样的理由,英文字母只有26个,加上大小写的区别,数字,标点,再加上一些特殊符号,如空白、回车等,很容易构成一个有128个字符的单字节存储的ASCII字符集,这个是美国的标准,还有IBM自己的标准EBDIC字符集,这样同一个二进制数还原成字符就至少有两种可能,比如二进制数01001110,在ASCII中代表大写字母N,在EBCDIC中却是加号+。
GB2312没有使用全部的128×128=16384个字符,实际只有94×94=8836个字符可用,最终用到了7445个。
GB2312-80的全称是《中华人民共和国 国家标准 信息交换用汉字编码字符集 基本集》,本标准规定了汉字信息交换用的基本图形字符及其二进制编码表示。它适用于一般汉字处理、汉字通信等系统之间的信息交换。它把图形字符的代码表分为94个区,每个区有94位。区的编号从1~94,由第一字节标识;位的编号也是从1~94,由第二字节标识。例如汉字“啊”用16—01表示(十进制,16进制:10H,01H),这个编码称为区位码,二进制表示为00010000 00000001。
半角和全角输入的拼音字母的二进制码是不一样的,比如半角输入的字母A,二进制码是01000001,十六进制是41,这是按ASCII字符集编码的,而全角输入的字母A,二进制编码是10100011 11000001,十六进制是A3 C1,这是按GB2312字符集编码的。
这个举个例子就明白了,比如“口”字,画成8×8的点阵图就是:
00000000
01111110
01000010
01000010
01000010
01000010
01111110
00000000
这样一个“口”字需要8个字节来存储。当然这只是其中一种最简单的表示方法,常用的还有16×16、24×24和32×32等点阵字形编码。而且同一个字还有不同字体的写法,如宋体、隶书和黑体等。同一种字体除了用点阵表示,还可以用矢量来表示,比如Windows中使用的TrueType字体。
GB2312编码(为什么要加2020H、8080H,外码→内码→交换码→字形码)的更多相关文章
- 做网站用UTF-8编码还是GB2312编码?
经常我们打开外国网站的时候出现乱码,又或者打开很多非英语的外国网站的时候,显示的都是口口口口口的字符, WordPress程序是用的UTF-8,很多cms用的是GB2312. 经常我们打开外国网站的时 ...
- Asp.net把UTF-8编码转换为GB2312编码
系统采用的UTF-8编码,而一些支持系统使用的是GB2312编码. 不同编码的页面.脚本之间互相引用,就会产生乱码的问题,解决方法就是统一成一种编码.asp.net 中,如果要修改输出页面的编码,可以 ...
- ASP中Utf-8与Gb2312编码转换乱码问题的解决方法 页面编码声明
ASP程序在同一个站点中,如果有UTF-8编码的程序,又有GB2312编码的程序时,在浏览UTF-8编码的页面后,再浏览当前网站GB2312的页面,GB2312编码的页面就会出现乱码 出现这样的问题是 ...
- GB2312 编码
GB2312编码范围:A1A1-FEFE,其中汉字编码范围:B0A1-F7FE. GB2312编码是第一个汉字编码国家标准,由中国国家标准总局1980年发布,1981年5月1日开始使用.GB2312编 ...
- vim 如何编辑 GB2312 编码的文件?
vim 如何编辑 GB2312 编码的文件? 彻底搞清楚字符编码: ASCII, ISO_8859, GB2312,UCS, Unicode, U 结合file和iconv命令转换文件的字符编码类型 ...
- Unicode gbk gb2312 编码问题 [转载]
原文地址: http://www.cnblogs.com/csn0721/archive/2013/01/24/2875613.html HTML5 UTF-8 中文乱码 <!DOCTYPE ...
- JS:中文GB2312编码
今天开发遇到了个问题,有点纳闷.... 在ajax的时候要传递一个中文值,不管我在js中是否使用了encodeURI.encodeURIComponent编码,但是在后台request获取的值是始终是 ...
- gb2312编码提交url乱码解决
gb2312编码提交url,服务器接收时出现乱码,用System.Web.HttpUtility.UrlDecode();解码 ,还是出现乱码,困老了我好长时间,终于在google上找到了解决办法. ...
- Linux下将UTF8编码批量转换成GB2312编码的方法
Linux下将UTF8编码批量转换成GB2312编码的方法 在sqlplus中导入UTF8编码的sql脚本就会出现乱码错误,这时就需要将UTF8编码转换成GB2312编码,下面为大家介绍下在Linux ...
随机推荐
- Centos7下修复 视频播放器(先 安装VLC视频播放器)
用最新的CentOS7发现没有视频播放器,于是在http://pkgs.org/上查找,发现了nux dextop仓库上有, 于是到他的官网上http://li.nux.ro/repos.html查了 ...
- 使用echarts绘制漂亮的渐变键盘仪表盘
echarts官方示例和默认样式都比较难看,经过一顿捣鼓实现比较漂亮的渐变仪表盘. 第一步:设置轴线 将图表轴线.label.分割线.隐藏,只保留刻度,然后修改刻度样式达到最终效果.不过要注意的是ax ...
- VMware 中时间同步设置
在VMware Workstation 9中安装了一个Ubuntu Server,跑了一段时间之后常发现虚拟机中系统(客户系统)时间要比物理机(宿主系统)中的系统时间慢很多. 几经折腾(部署在VMwa ...
- Help Jimmy(动态规划)
点击打开链接 Help Jimmy Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 12168 Accepted: 402 ...
- 总结day26 ----验证客户端的合法性,已经操作系统,进程的简单初识别
前情提要 一:验证客户端的合法性: # .需要认证 # 程序和用户打交道的时候才会用到用户认证 # 对所有的客户端进行统一的认证 # # 我现在要做的事情 # 写一个server端 # 写一个clie ...
- mybatis的执行流程
1.SqlSessionFactoryBuilder与SqlSessionFactory 我们一般在使用mybatis是都会通过new SqlSessionFactoryBuilder.build(. ...
- 微信小程序富文本编辑,Thinkphp5.1
内容很简单,代码做了注释可以看一下 主要是把 文本 标题 标题颜色 图片 赋值到数组内, 举例: { pic: "/Share/image/images/bgqq_01.png" ...
- 采用prometheus 监控mysql
1. prometheus 是什么 开源的系统监控和报警工具,监控项目的流量.内存量.负载量等实时数据. 它通过直接或短时jobs中介收集监控数据,在本地存储所有收集到的数据,并且通过定义好的rule ...
- TX2 i2c-tools使用
安装: apt-get install libi2c-dev i2c-tools 检测i2c总线数目 用i2cdetect检测有几组i2c总线在系统上: i2cdetect -l 可以看到系统中有9组 ...
- 「Neerc2016」Expect to Wait
题目描述 ls最近开了一家图书馆,大家听说是ls开的,纷纷过来借书,自然就会出现供不应求的情况, 并且借书的过程类 似一个队列,每次有人来借书就将它加至队尾,每次有人来还书就把书借给队头的若干个人,定 ...