网页
综合
更新时间 2026-11-15 07:46:13
汉字与汉字区位码的转换-菜鸟编程-鸟儿博客
自动蜘蛛
www.birdol.com
正文约 4533 字
鸟儿博客 教程存档相册关于 订阅 花褪残红青杏小。燕子飞时,绿水人家绕。 你的位置: 鸟儿博客 > 菜鸟编程 > 汉字与汉字区位码的转换 汉字与汉字区位码的转换 菜鸟编程 十五楼的鸟儿 18年前 (2009-07-14) 60570浏览 0评论 一个函数方便在汉字和其区位码之间进行转换。在没有 Uncode 的时代, 用 256 个 ACSII 只是提供了英文的方法, 其他文字不能使用ASCII。那时是独立的, 中文就有: 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 编码了, 其实咱们现在还是使用的这种双字节内码, 这是系统根据我们选择的字符集自动转换的.下面是转换函数:[code=delphi]unit Unit1;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;type TForm1 = class(TForm) Button1: TButton; Button2: TButton; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); end;var Form1: TForm1;implementation{$R *.dfm}{查汉字区位码}function Str2GB(const s: AnsiString): string;const G = 160;begin Result := Format('%d%d', [Ord(s[1])-G, Ord(s[2])-G]);end;{通过区位码查汉字}function GB2Str(const n: Word): string;const G = 160;begin Result := string(AnsiChar(n div 100 + G) + AnsiChar(n mod 100 + G));end;{测试}procedure TForm1.Button1Click(Sender: TObject);begin ShowMessage(GB2Str(4582)); {万}end;procedure TForm1.Button2Click(Sender: TObject);begin ShowMessage(Str2GB('万')); {4582}end;end.{获取区位码表: 准备个 Memo 接收(注意使用了上面的函数)}var i,j: Byte; s: string;begin s := ''; for i := 1 to 94 do begin for j := 1 to 94 do s := Format('%s %s', [s, GB2Str(i*100 + j)]); Memo1.Lines.Add(s); s := ''; end;end;[/code] 转载请注明:鸟儿博客 » 汉字与汉字区位码的转换 继续浏览有关 DELPHI 的文章 分享到 上一篇 Delphi之钩子函数(二) 下一篇 Delphi的编译指令 与本文相关的文章 delphi之截取整个窗体图片delphi之猥琐的webserver实现Delphi的关键字[整理]delphi之模拟QQ窗口抖动delphi之调用外部dll中的函数建立快捷方式的函数win7下使用delphi7的方法Delphi 的运算符列表Delphi的编译指令delphi连接access数据库示例 发表我的评论 换个身份 取消评论 提交评论 Hi,您需要填写昵称和邮箱! 昵称昵称 (必填) 邮箱邮箱 (必填) 网址网址 网站分类 Web └ 主题 └ ZBLOGPHP主题 └ ZBLOGASP主题 └ ZBLOGASP1.8主题 └ 插件 └ ZBLOGPHP插件 └ ZBLOGASP插件 └ ZBLOGASP1.8插件 文章归档 2021年12月 (1) 2021年8月 (4) 2021年7月 (3) 2020年12月 (1) 2020年7月 (1) 2020年6月 (3) 2020年5月 (9) 2020年4月 (4) 2020年1月 (10) 2019年11月 (1) 2019年10月 (1) 2019年9月 (1) 2019年8月 (1) 2019年5月 (1) 2019年2月 (1) 2019年1月 (1) 2018年12月 (2) 2018年11月 (1) 2018年6月 (4) 2018年5月 (11) 2018年4月 (2) 2017年11月 (2) 2017年10月 (3) 2017年9月 (7) 2017年8月 (1) 2017年7月 (1) 2017年6月 (1) 2017年5月 (3) 2017年2月 (1) 2016年12月 (1) 2016年11月 (1) 2016年10月 (1) 2016年9月 (1) 2016年8月 (1) 2016年7月 (3) 2016年6月 (9) 2016年5月 (3) 2016年4月 (1) 2016年3月 (2) 2016年1月 (2) 2015年12月 (3) 2015年11月 (1) 2015年10月 (246) 2015年9月 (3) 2015年8月 (2) 2015年7月 (13) 2015年6月 (5) 2015年5月 (2) 2015年4月 (2) 2015年3月 (2) 2015年2月 (3) 2015年1月 (5) 2014年12月 (2) 2014年11月 (11) 2014年10月 (3) 2014年9月 (8) 2014年8月 (14) 2014年7月 (12) 2013年2月 (1) 2013年1月 (1) 2012年8月 (1) 2012年4月 (3) 2012年3月 (1) 2011年10月 (1) 2011年6月 (4) 2011年5月 (3) 2011年4月 (6) 2011年3月 (3) 2011年2月 (1) 2011年1月 (4) 2010年12月 (4) 2010年8月 (1) 2010年7月 (2) 2010年6月 (1) 2010年4月 (1) 2010年3月 (5) 2010年2月 (6) 2010年1月 (12) 2009年12月 (18) 2009年11月 (9) 2009年10月 (9) 2009年9月 (8) 2009年8月 (2) 2009年7月 (5) 2009年6月 (11) 2009年5月 (6) 2009年4月 (15) 2009年3月 (17) 2009年2月 (9) 2009年1月 (30) 2008年12月 (20) 2008年11月 (14) 2008年10月 (8) 2008年9月 (5) 2008年8月 (5) 2008年7月 (4) 2008年6月 (7) 2008年4月 (4) 2008年3月 (6) 2008年1月 (2) 2007年8月 (1) 最新留言 1111111 1个月前 (04-03) (04-03 )说: hello 咸鱼 1年前 (2025-05-08) (05-08 )说: 大佬还在吗₍˄·͈༝·͈˄*₎◞ ̑̑在就吱个声[F]question[/F] jian27 3年前 (2023-05-08) (05-08 )说: 这个版本比应用中心的新? horse320 5年前 (2021-11-07) (11-07 )说: 支持多关键词搜索吗 访客100866 5年前 (2021-11-05) (11-05 )说: 能自适应主题吗?要是和你的页面一样在我这主题上就不好看了 访客10086 5年前 (2021-11-05) (11-05 )说: 能自适应主题吗?要是和你的页面一样在我这主题上就不好看了 ©Copyright Birdol.Com. All Rights Reserved. Sitemap. 粤ICP备14083013号 Powered By Z-BlogPHP 1.7.4 Theme transplant by Nobird
本页为82搜索生成的网页快照,内容来自站内索引;演示数据的原文链接仅作示例。