在没有 Uncode 的时代, 用 256 个 ACSII 只是方便了英文, 其他文字怎么办?

那时是各自为政的, 譬如中文就有: GB2312-80(国内简体)、Big5(台湾繁体)、HKSCS(香港繁体), 但它们互不兼容.

GB2312(1980年) 后来升级到 GBK(1995年), 现在电脑上使用的是 GB18030(2000年), 这个系列是向后兼容的.

区位码的概念是在 GB2312 时提出的, GB2312 是一个 94*94 的二维表, 行就是 "区"、列就是 "位", 譬如 "万" 字在 45 区 82 位, 所以 "万" 字的区位码是: 4582.

00-09 区(682个): 是符号、数字、英文字符...制表符等;
10-15 区: 空白, 留待扩展;
16-55 区(3755个): 常用汉字(也有叫一级汉字), 按拼音排序;
56-87 区(3008个): 非常用汉字(也有叫二级汉字), 这是按部首排序的;
88-94 区: 空白, 留待扩展.

还有两个概念: 国际码、内码.

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

那什么又是国际码呢?
咱们的 GB2312 用一个二维表表示了咱们需要的字符, 其他文字可能也是如此; 为了区别, 所以有国际组织规定把咱们的 "区" 和 "位" 分别加上 32(十六进制表示: $20; 二进制表示: 00100000) 作为国际码(那其他文字应该加另外一个不同的数字).
这样我们可以算出(45+32, 82+32):
"万" 字的国际码是 77 114($4D72)

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

总结一下: 从区位码, 区和位分别 +32 得到国际码, 再分别 +128 得到内码;
简化一下: 区位码的区和位分别 +160 即可得到内码, 用十六进制表示: 区位码 + $A0A0 = 内码.

验证一下前面从记事本输入得到的 CD F2:
45 + 160 = 205; (205 就是 十六进制的 $CD)
82 + 160 = 242; (242 就是 十六进制的 $F2)

这样, 内码的两个字节的最高位就都是 1 了, 另外 ASCII 的(0-254)最高位都是 0, 所以有人也使用这个特点来区别汉字.

虽然 Window 2000 开始, 系统已经使用 Uncode 编码了, 其实咱们现在还是使用的这种双字节内码, 这是系统根据我们选择的字符集自动转换的.

此时再看前面的函数 http://www.cnblogs.com/del/archive/2008/11/19/1336444.html 应该不会有困难了.


转载于:https://www.cnblogs.com/del/archive/2008/11/19/1336467.html

汉字与区位码(2) - 分析相关推荐

  1. php 区位码字符,PHP汉字转区位码用法示例

    这篇文章主要为大家详细介绍了PHP汉字转区位码用法示例,具有一定的参考价值,可以用来参考一下. 感兴趣的小伙伴,下面一起跟随512笔记的小编小韵来看看吧! 代码如下: // Www.512Pic.co ...

  2. 计算机内区位码默认是几进制,汉字的区位码怎么转换成十六进制?

    一.ASCII码是计算机进行信息交换的最基本字符标准,例如,键盘与计算机主机之间的通信就是靠ASCII的标准来支持的.例如: 大写字母A的ASCII码就是十进制数65,数字0的ASCII就是48,小写 ...

  3. php汉字转区位码,PHP里实现汉字转区位码的示例代码_php

    以下为引用的内容: global $PHP_SELF; //echo $PHP_SELF; $t1=$_POST['textfield1']; $t2=$_POST['textfield2']; $t ...

  4. php汉字转区位码,PHP中实现汉字转区位码应用源码实例解析

    global $PHP_SELF; //echo $PHP_SELF; $t1=$_POST['textfield1']; $t2=$_POST['textfield2']; $t3=$_POST[' ...

  5. 从汉字到区位码的转换

    学校要我们填写毕业生的情况表,机读卡那种,姓名要用区位码.我想如果用程序来查询的话,就是数据库查找,我想编一个应该很简单的,就上网看看有没有类似的程序,然后我再用它的数据库自己实现一个,可让我查到了一 ...

  6. c++汉字与区位码互转换

    汉字转区位码: CString m_s,m_ss; m_s="中"; BYTE hz[2]; hz[0]=(BYTE)m_s.GetAt(0); hz[1]=(BYTE)m_s.G ...

  7. php 区位码字符,PHP里实现汉字转区位码的示例代码

    PHP里实现汉字转区位码的示例代码 PHP里如何实现汉字转区位码这个问题一直困扰这大多程序员,那么下面这个源码实例相信能给大家带来很大的帮助. 以下为引用的内容: global $PHP_SELF; ...

  8. php 区位码字符,PHP中实现汉字转区位码应用源码实例解析

    global $PHP_SELF; //echo $PHP_SELF; $t1=$_POST['textfield1']; $t2=$_POST['textfield2']; $t3=$_POST[' ...

  9. 字符区位码 java_用Java取得汉字的区位码

    发代码之前先转段预备知识 计算机处理汉字信息的前提条件是对每个汉字进行编码,这些编码统称为汉字编码.汉字信息在系统内传送的过程就是汉字编码转换的过程. 汉字交换码:汉字信息处理系统之间或通信系统之间传 ...

最新文章

  1. python上下文管理器with
  2. 神经网络的可解释性综述
  3. java中main方法前的public static void及其后面的(String[] args)【笔记自用】
  4. mysql5.7密码过期ERROR 1862 (HY000): Your password has expired. To log in you must change
  5. 百度网盘图片直链的php解析代码
  6. PDF控件Aspose.Pdf 12月新版17.12发布 | 附下载
  7. CSDN去广告,超清爽界面
  8. 详解AVL树(平衡二叉树)
  9. win7系统修改磁盘提示参数错误的解决办法
  10. linux文件恢复工具下载_十大最佳Linux数据恢复工具,用于恢复已删除/损坏的文件(包括优盘,部分工具不支持FAT32等格式)
  11. Spring Cloud Alibaba Nacos Config - - - >多配置文件/共享配置
  12. Dart Sass替换Node Sass
  13. 光猫、路由器、交换机、wifi的概念和作用
  14. macOS Big Sur 11.0 B2(20A4300b)原版镜像
  15. 小技巧---笔记本外接显示器设置全屏壁纸
  16. 【Vue3.0 + Element-plus】el-tree树状结构节点前箭头样式修改
  17. 如果存在表则删除表然后创建Mysql
  18. [Vue 牛刀小试]:第十六章 - 针对传统后端开发人员的前端项目框架搭建
  19. ui需要会html吗,UI设计师需要会编程吗?快速入门HTML/CSS — (上)
  20. LeetCode算法 —— 解数独

热门文章

  1. Linux内核管理之分配掩码(三)
  2. python语言分数等级转化_如何把分数转化成等级
  3. HBase之HFile索引机制
  4. (06)System Verilog 数组类型示例
  5. oracle导出报错04063,Oracle EXP导出报错的解决方法
  6. lamp 重启mysql_lamp常用命令 --Ubuntu下启动/重启/停止apache,mysql服务器
  7. Python入门级2
  8. 无源波分和彩光模块_5G前传WDM解决方案,无源波分和彩光模块
  9. 【蓝桥杯单片机】IIC通讯协议与EEPROM(AT24C02)(官方驱动源码改写)
  10. 【K210】【MaixPy】一、Maix Dock入门之FPIOA和GPIO