js地址中百分号字符转化为汉字_汉字的显示与放大1

Turbo C 是一个西文编辑平台,不能直接显示汉字,除非先安装中文操作系统(如 UCDOS)。

但是安装中文操作系统会占用大量内存,有可能使 TC 无法加载或引起功 能冲突。

在西文状态下显示和放大汉字的方法

采用这种方法, 不需要安装中文系统,所需要的仅是一个或几个字库文件。

汉字编码


1.区位码

汉字有数万个(康熙字典收录 47000 多个),但绝大多数都不常用。

最常用的高 频字仅约 100 个,常用字约 3000 个,次常用字约 4000 个,罕见字约 8000 个,其余 都是死字。

1981 年,我国公布了《通讯用汉字字符集(基本集)及其交换码标准》 GB2312-80 方案,把高频字、常用字、次常用字汇集起来组成了汉字基本字符集(共 6763 个汉字)。

在该字符集中又根据使用频度把汉字分为一级汉字(3755 个,按拼 音排序)和二级汉字(3008 个,按部首排序)。除了这两级汉字,字符集还包括西 文字符、数字、图形符号共 700 多个非汉字字符。

汉字字符集(GB2312-80)将两级汉字和 700 多个非汉字字符都汇集在一张表 格中,该表格共有 94 行 94 列,每行称作一个“区”,每列称作一个“位”。(从1区,1位开始。)前 15 区 为非汉字字符,从 16 区开始才是汉字。

一个汉字(或符号)在表格中所处的行与列(即区和位)构成了一个汉字(或 符号)的区位码。例如:汉字“啊”位于第 16 行第 1 列,故“啊”的区位码是 1601。

2.国标码

计算机要处理汉字,必须给每个汉字一个唯一的编码,这些编码称作国标码。

英文字符是用一个字节进行编码的,即 ASCII 码,而汉字数量众多,需要用两 个字节才足以完成编码,所以汉字的国标码是两个字节。

国标码的两个字节是这样来的:将汉字(包括前 15 区的符号)的区号和位号分别加上 32 并各用一个字节表示出来。

汉字的区号、位号最大是 94,94 + 32 = 126,不超过 127,因此国标码的两个字节最 高位都是 0。

3.机内码

每个汉字都有唯一的国标码,按说可以用计算机处理汉字了,但不幸的是,计 算机不仅要处理汉字,还要处理英文字符,而汉字国标码和英文编码是存在冲突的。

汉字的国标码有两个字节,例如:“大”的国标码是:00110100 01110011,如 果把国标码的这两个字节直接存储到计算机中,则系统很可能把它们当做两个英文 字符(字符‘4’和字符‘i’), 因此计算机内部不能存储国标码。

为此,计算机内部存储汉字编码时,通常都是把国标码两个字节的最高位都改 为 1,这样就由国标码变成了机内码(计算机内部实际存储的汉字编码)。如:“大” 的国标码是 00110100 01110011(0x3473),机内码是:10110100 11110011(0xb4f3)。

在内存中存储机内码时,总是把与区号相关的字节存储在字节,而把 与位号相关的字节存储在字节。

机内码是在国标码的基础上将两字节最高位都变为 1 而得来,相当于两个字节 各加了 128。

有了区位码和国标码的32,国标码和机内码的128,这些量就可以相互转换。

e.g.1:计算“大”的区号和位号

char c[3] = ”大”;

int qh, wh;

qh = c[0] - 160;

wh = c[1] - 160;

e.g.2:存储汉字到数组中

1.char c[5] = ”大小”;

2.strcpy(c,”大小”);

4.字形码

不同的汉字,其形状是不同的。

为在计算机中显示汉字,通常都是先把每个汉 字的形状记录下来形成字形码。

16 点阵宋体字库中“大”字的字形码是这样来的:

16*16 的正方形表格中,从左上角的小方格开始记录,若小方格被“大”字覆盖, 则记为 1,否则记为 0。

088285dd501e52a8c87a489ec4b68409.png
5dba01a19b161ec2ff9759e8fecec45f.png

图 中共 16*16 = 256 小格,每 8 小格记成 1 个字节,所以 16 点阵字库中每个 汉字的字形码都是 32 字节。

按照汉字(符号)在区位表中的排列顺序把每个汉字(符号)的字形码汇集起 来存储到一个文件中,该文件便是字库文件(简称字库)。

字库中存有区位表中所有汉字(符号)的字形码。当需要显示某汉字时,必须 先从字库中调出该汉字的字形码,而后才能在屏幕上把它显示出来。

根据点阵数目的不同和汉字字体的不同,字库又分为:16 点阵宋体字库、16 点 阵楷体字库……,24 点阵宋体字库、24 点阵楷体字库……,48 点阵宋体字库…… 等,点阵数越大,字体笔画越平滑,点阵越小,笔画锯齿越严重。

5.地址码

一个汉字的字形码在字库中的起始地址称为该汉字的地址码。

“大”字的字形码存储在字库的位置:

“大”字在区位表中处于 20 区 83 位,在它前面共有(20 - 1)* 94 + (83 - 1)个汉 字(或符号)。

由于 16 点阵字库中每个汉字(符号)的字形码都是 32 字节,所以“大” 字的字形码在字库中的起始地址是:( (20 - 1) * 94 + (83 - 1) ) * 32 +1(下一个)-1(文件字节数从0开始)。

以上所有陈述原文均来自王金鹏, 肖进杰 编著的 《C 程序设计案例与提高教程 》

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值