无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站投放广告、加入VIP会员,请联系 微信:wuyouceo
查看: 6962|回复: 23
打印 上一主题 下一主题

dos下汉字那点儿事儿(个人理解)

[复制链接]
跳转到指定楼层
1#
发表于 2014-1-28 12:32:16 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
本帖最后由 dos时代菜鸟 于 2014-3-31 07:36 编辑

DOS下显示汉字似乎不简单,下面是我的理解,如有偏差,请大侠们指正。
对应于英文,ASCII 0-127 数值的ascii码,汉字成千上万。用0-127 可以表示大小写英文、数字、小数点和键盘按钮,而中文怎么表示呢?前辈们想到了一个方法:
就是用两个数值大于127的ascii 联合起来表示一个汉字,有点像四角号码字典查字法。0-127西文字符 占用1个字符 8位二进制位置,而实际上 0-127 的西文字符只占用 7位二进制。用两个占位8位的ascii字符表示一个汉字(有人叫做高站位H),就可以避开0-127 ,避免与西文字符冲突。这就需要 这两个表示汉字的ascii数值必须大于160,而可识别西文ascii最大255,所以表示汉字的两个ascii字符的值就是161-255之间。如此组合应该可以组合成不到一万个汉字,这足够日常使用了,而事实上我们的常用汉字系统hzk16字库中有效汉字为6768个。不信你在运行了ucdos后,在dos下用alt+(161-255)的方法随意输入两个ascii字符,肯定能呈现出一个汉字,当然如果hzk16字库中没有这个组合,就不好说了。
如果在c语言中用 unsigned 定义这两个字符,肯定大于255,所以,如果在dos下遇到两个这样的字符组合其值大于255,那可以判定为汉字,而单个出现的161-255间的ascii码其数值一定在161-255间是小于256的。当然这个判断也不一定准,因为人家可能就是两个161-255间的ascii码(比如音标和制表符),而非汉字,但这个情况太少了,我想这也是为啥有的汉字系统不能显示西文制表符表格的原因。
Hzk16字库的结构:
首先hzk16是二进制文件。每一个汉字占用32个字节(16*16点阵,每行二进制2个占8位的数字存放,共16行,所以32个字节,每行16位,每位非0即1,如此就用‘1’勾勒出一个汉字的轮廓。),显示出来占用两个字符的显示位,也就是两个西文字符的位置。前面说了用两个数值在161-255间的ascii码表示一个汉字,那么,如何确定任意组合对应的汉字呢。Hzk16中有94个区,每个区有94个汉字或图形符号,其中16-87区是汉字,1-9区是符号,10-15及88区以后是空留的。那么那两个表示汉字的ascii码字符,与这又是什么关系呢?第一个ascii码字符的数值减160就是所表示汉字的区号,而第二个ascii码字符的数值减160就是所表示汉字的位号,如“啊”,可以用 Alt+161,Alt+176这两个ascii字符表示,即ascii码数值为161和176的两个ascii码字符表示,“啊”字的区码是1,位码是16,如果在ucdos 的区位输入法中输入 1601 ,就能得到 “啊”字了。如果用c语言 fopen(”hzk16”,”rb”) 方式打开,读取这个字的位置应该是((区码-1)*94+位码-1)*32=480,c语言可以通过fread 方式读取hzk16的480位置处的32个字节信息传递个数组,数组中只包含0或者1,0表示改点无内容,1表示改点有内容,然后通过画图画点函数在图形模式下画出图像就是“啊”字。
24#
发表于 2014-7-21 08:39:20 | 只看该作者
真的让人很怀旧。
回复

使用道具 举报

23#
发表于 2014-5-3 20:11:31 | 只看该作者
学习了,很长见识。
回复

使用道具 举报

22#
发表于 2014-5-1 23:41:14 | 只看该作者
DOS时代喜欢用哪个中文系统是个人的事情。但我还是想告诉你,UCDOS的广告把国家统计局放入,公开违法。广告法不允许广告中有国家机关名称,但国家统计局的违法就没人敢追究,让人想起***时代的中统和军统。这就是九十年代最丑陋的一次*。
回复

使用道具 举报

21#
 楼主| 发表于 2014-4-29 12:44:07 | 只看该作者
滑头 发表于 2014-4-27 01:01
这里说的不就是中文内码吗?没有说出什么“不容易”来呀!
DOS下的中文系统有个发展过程,但每个中文系统 ...

我用ucdos 是因为 他的驱动兼容性强,尤其是ucmouse 可以和ctmouse  配合。而tw ccdos 等似乎都和 ctmouse 有冲突。
回复

使用道具 举报

20#
发表于 2014-4-27 08:21:36 | 只看该作者
原来如此,学习了,谢谢楼主
回复

使用道具 举报

19#
发表于 2014-4-27 01:01:25 | 只看该作者
本帖最后由 滑头 于 2014-4-27 01:03 编辑

这里说的不就是中文内码吗?没有说出什么“不容易”来呀!
DOS下的中文系统有个发展过程,但每个中文系统都要是各自的显示点阵字库(16x16),没有统一的规格。为显示这些点阵还要有针对不同显示卡和显示方式的驱动程序。实现了显示的直接写屏以后才实现了屏幕上的文字复制。UCDOS是个钻空子走关系的系统,直接写屏的中文显示有很严重的表格识别错误,但被捧得很高。后来不得不把中国龙汉字系统的表格识别搬来纠正,那已经是WIN95开始风行的时候了。DOS下真正实用的还就是常见的天汇汉字。
DOS下中文系统打印比显示更不容易,同样要有针对不同打印机的驱动,同时还要另外配备字库。开始也是点阵,24x24和48x48,直到求泊君的WPS才在打印中用上了中文的矢量字库。

点评

我用ucdos 是因为 他的驱动兼容性强,尤其是ucmouse 可以和ctmouse 配合。而tw ccdos 等似乎都和 ctmouse 有冲突。  详情 回复 发表于 2014-4-29 12:44
回复

使用道具 举报

18#
发表于 2014-3-16 05:18:27 | 只看该作者
学习学习,长知识了
回复

使用道具 举报

17#
发表于 2014-3-12 11:06:41 | 只看该作者
挺不错的啊,分析的很好
回复

使用道具 举报

16#
发表于 2014-3-6 22:45:43 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

15#
发表于 2014-2-27 10:04:24 | 只看该作者
学习了,支持一下。
回复

使用道具 举报

14#
 楼主| 发表于 2014-2-27 08:01:28 | 只看该作者
pseudo 发表于 2014-2-20 14:52
文本模式下显示汉字也是DOS时代好玩的方式。

是说用 ascii 128-255 来显示汉字么?同屏幕可显示 64个汉字。
回复

使用道具 举报

13#
发表于 2014-2-21 20:26:53 | 只看该作者
DOS界面为什么不搞中文版面原因困难重重。
回复

使用道具 举报

12#
发表于 2014-2-20 22:23:25 | 只看该作者
原来如此,长知识了。
回复

使用道具 举报

11#
发表于 2014-2-20 14:52:59 | 只看该作者
文本模式下显示汉字也是DOS时代好玩的方式。

点评

是说用 ascii 128-255 来显示汉字么?同屏幕可显示 64个汉字。  详情 回复 发表于 2014-2-27 08:01
回复

使用道具 举报

10#
发表于 2014-2-20 14:43:42 | 只看该作者
DOS下面显示汉字确实是很不容易的
回复

使用道具 举报

9#
发表于 2014-2-3 19:20:53 | 只看该作者
学习了,涨见识了
回复

使用道具 举报

8#
发表于 2014-2-2 01:14:06 来自手机 | 只看该作者
长见识谢谢楼主的细心指导
回复

使用道具 举报

7#
发表于 2014-1-31 10:27:59 | 只看该作者
虽然早已了解,还是要谢谢分享……
回复

使用道具 举报

6#
发表于 2014-1-31 05:53:41 | 只看该作者
来给大侠捧场。
回复

使用道具 举报

5#
发表于 2014-1-29 11:14:55 | 只看该作者
原来如此,长知识了。
回复

使用道具 举报

4#
发表于 2014-1-28 19:41:44 来自手机 | 只看该作者
dos版块很冷清,进来支持一下。现在用Dos的很少了吧,我在Dos下也只用Dg和Ghost
回复

使用道具 举报

3#
发表于 2014-1-28 18:03:43 | 只看该作者
学习学习,长知识了,当年学的UCDOS
回复

使用道具 举报

2#
发表于 2014-1-28 14:13:44 | 只看该作者
原来DOS下面显示汉字确实是很不容易的,现在才知道。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|捐助支持|无忧启动 ( 闽ICP备05002490号-1 )

闽公网安备 35020302032614号

GMT+8, 2024-11-30 23:42

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表