当计算机传入中国并开始普及时,首要问题是解决中文编码问题,也就诞生出了GB2312、GBK等等编码方式。而其中的具体实现方式是什么?区位码是什么?国标码是什么?它们如何转换又为什么这么转换?

首先来看一看什么是区位码?什么是国标码?什么是内码?

区位码:

GB2312是一种中文的编码方式,具体是由区位码来实现的。GB2312将所有的汉字编入一个 94*94 的二维表, 行就是 "区"、列就是 "位", 其中的一个汉字由区、位唯一定位,其对应的区、位合并就为区位码。

譬如 "万" 字在 45 区 82 位, 所以 "万" 字的区位码是: 4582.

00-09 区(682个): 是符号、数字、英文字符...制表符等;

10-15 区: 空白, 留待扩展;

16-55 区(3755个): 常用汉字(也有叫一级汉字), 按拼音排序;

56-87 区(3008个): 非常用汉字(也有叫二级汉字), 这是按部首排序的;

88-94 区: 空白, 留待扩展.

国标码:

将 "区" 和 "位" 分别加上32(十六进制表示: 20H) 作为国标码

这样我们可以算出(45+32, 82+32):

"万" 字的国标码是 77114(4D72.H)

77  = 0111 0111

114 = 0111 0010

内码:

不过这还不能在计算机上使用,因为这样会和早已通用的 ASCII 码混淆(导致乱码)。譬如: 77 是 ASCII 的 "M", 114 是 ASCII 的 "r"。所以又有规定把每个字节的最高位都从 0 换成 1(这之前它们都是 0),或者说把每个字节(区和位)都再加上 128(十六进制的: 80H),从而得到 "机内码", 也就是前面所说的 "内码"。

77 + 128 = 205 = CD

114+ 128 = 242 = F2

打开记事本输入 "万" 字,保存(编码选择 ANSI); 然后用二进制编辑器(譬如:UltraEdit) 打开,会看到: CD F2, 这就是 "万" 字的内码!

总结一下:从区位码(国家标准定义) ---> 区和位分别 +32(20H) 得到国标码---> 再分别 +128 (80H)得到内码(与ACSII也不再混淆); 区位码的区和位分别 +160 即可得到内码。用十六进制表示:区位码 + A0A0H = 内码。

为什么要加上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的编码标准,而这种方法最后产生的编码最后就被一些教科书称为内码。

汉字编码-区位码、国标码和内码发展和区别以及为什么要加2020H、8080H相关推荐

  1. mysql外码内码定义_刨根究底字符编码之六——简体汉字编码中区位码、国标码、内码、外码、字形码的区别及关系...

    简体汉字编码中区位码.国标码.内码.外码.字形码的区别及关系 GB2312.GBK.GB18030等GB类汉字编码方案的具体实现方式是怎样的?区位码是什么?国标码是什么?内码.外码.字形码又是什么意思 ...

  2. 刨根究底字符编码之六——简体汉字编码中区位码、国标码、内码、外码、字形码的区别及关系

    简体汉字编码中区位码.国标码.内码.外码.字形码的区别及关系 GB2312.GBK.GB18030等GB类汉字编码方案的具体实现方式是怎样的?区位码是什么?国标码是什么?内码.外码.字形码又是什么意思 ...

  3. 信息编码--区位码,国标码,内码

    计算机内的信息编码 西文字符编码 西文就是英文,数字,英文标点等等,每个ASCII码以一个字节(Byte)储存,国际通用的7位码用7位二进制数表示一个字符的编码,其编码范围是00000000-0111 ...

  4. 汉字编码与编程相关问题总结:ASCII、机内码、区位码、国标码、Unicode码他们之间是如何转换的

    一.ASCII.机内码.区位码.国标码.Unicode码他们之间是如何转换的,方程式是什么 汉字系统中的过程包括区位码.国标码和机内码,其中的转换关系如下: 1.区位码(十进制)转换成区位码(十六进制 ...

  5. 汉字编码与编程相关问题总结:ASCII、机内码、区位码、国标码、Unicode码是如何转换的

    一.ASCII.机内码.区位码.国标码.Unicode码他们之间是如何转换的,方程式是什么 汉字系统中的过程包括区位码.国标码和机内码,其中的转换关系如下: 1.区位码(十进制)转换成区位码(十六进制 ...

  6. mysql外码内码定义_中文编码杂谈(转) - CodeAxe的个人页面 - OSCHINA - 中文开源技术交流社区...

    编码问题的例子 在windows自带的notepad(记事本)程序中输入"联通"两个字,保存后再次打开,会发现"联通"不见了,代之以"��ͨ" ...

  7. mysql外码内码定义_内码和外码分别是什么啊?

    满意答案 haomingwen 2017.10.03 采纳率:57%    等级:10 已帮助:1369人 我们常说汉字的"内码"与"外码". 内码是汉字在计算 ...

  8. windows内码、外码、字符映射表

    1.内码和外码 我们常说汉字的"内码"与"外码". 内码是汉字在计算机内部存储,处理和传输用的信息编码.它必须与ASCII码兼容但又不能冲突. 所以把国标码两个 ...

  9. 汉字字符内码查询_计算机等级考试查询系统

    全国计算机等级考试查询系统 查询地址最下面阅读原文?? 计算机的发展简况 1946年第一台数字计算机(ENIAC)问世 (诞生于美国) 计算机基础知识 一.单选题练习 1.完整的计算机系统由( C ) ...

最新文章

  1. xtragrid 上移下移
  2. SCLS:中科院遗传发育在拟南芥二半萜类化合物调控根系微生物组取得突破进展
  3. RESTful Web 服务 - 缓存
  4. python智能识别_Python人工智能识别文字内容(OCR)
  5. 用 UrlRewriteFilter 实现 URL 重写
  6. textarea内容有换行时存入数据库丢失问题的解决 (转载)
  7. 周二直播丨Oracle数据库SQL执行计划的取得和解析
  8. php百度收录域名访问次数,PHP获取网站百度搜索和搜狗搜索收录量代码
  9. hastable与dictionary
  10. matlab 常用机器学习算法的实现
  11. mysql 8.0 yum_CentOS7使用yum安装MySQL8.0
  12. 在ubuntu上一键安装TIM的脚本
  13. 股价屡创新高,发布会带来“十三香”,苹果还能躺赢?
  14. tungsten mysql_ETL之Tungsten Replicator
  15. CTSC2016APIO2016爆零记
  16. Linux怎么彻底删除用户
  17. 触屏笔哪个牌子好?平替电容笔性价比高的推荐
  18. mac python环境搭建
  19. 非线性方程的数值解法
  20. 开设python的大学-2018年,大学应该开设哪些编程语言课程

热门文章

  1. 不知道照片加水印怎么弄?这三个方法让你轻松实现
  2. uniapp自定义tabbar(支持中间凸起,角标,动态隐藏tab,全端适用)
  3. Kappa Statistic卡巴统计量
  4. 从过去的错误中吸取教训_从失败中吸取教训作文500字
  5. 如何打开mysql odbc数据源_mysql是如何配置ODBC数据源的方法
  6. 博弈论总结 必胜点 SG函数 巴什博弈 尼姆博弈
  7. 阿里云推荐码(wzrd94)
  8. 后台数据转树形结构返回前台
  9. 解决微信小程序报[ app.json 文件内容错误] app.json: app.json 未找到,未找到入口 app.json 文件,或者文件读取失败,请检查后重新编译。小程序app.json报错
  10. 自媒体:公众号今日头条同步教程