爱技术

 找回密码
 注册会员

QQ登录

只需一步,快速开始

微信登录

微信扫一扫,快速登录

搜索
查看: 3939|回复: 35
收起左侧

[Flash修改] 批量修改汉字字体的方法(修正Char.txt的错误)

[复制链接]
发表于 2005-12-20 23:18:52 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?注册会员 微信登录

x
今天在检查字体的时候,发现Char.txt中有错误,把改正的放上来(Char_P1.txt),在Char_P1.zip中
====================================
答应过机友把方法发出来的:)不过周日偷懒,呵呵,没有弄

在此,将详细步骤以及操作的原因写下来,但因为可能有些机友只想知道具体的操作步骤,而不想知道操作的原因,所以,具体要实施的操作步骤以棕色标注,只想知道如何操作的机友光看棕色的字就可以了:)

我当初的想法是,有些软件可以将电脑系统中的字体生成字库的bin文件,或者是c/asm的代码,这样可以避免一个点一个点的去做汉字,可是在用SiemensCE的时候发现,小8的字体是比较特殊的,是Siemens针对英文,数字还有其他字符以及汉字所做的一套自己的标准,在小8里面,一个字符/汉字的开头比普通的字库要多出8位(一字节),而且小8的字库normal字是占用13行的,所以要用软件自动生成bin字库再刷入是不太实际的,因为通常都是12行,并且开头也没有那一个字节,所以只能生成c/asm的代码,然后再修改了

我在网上找了一会,找到了FontGen这个软件,可以很好的处理简体以及繁体,但是仍然有一个问题(还是由小8的字体的特点导致的),所以导致了后面多了一步操作。

具体的操作以及原因:

1  挑选汉字

这一步最花费时间了,要选出小8所支持的所有汉字,并且按照在FullFlash中的连续位置来排列,不过好在我已经做完了:)
现在只需要直接使用Char.txt就可以了(在Char.zip中)。
用SiemensCE可以看到小8支持的汉字,一个一个打下来肯定会很慢,而且有些字还真不知道怎么打。。。
按照SiemensCE上显示出的小8汉字的排列方式可以看出,小8所支持的汉字是按照unicode排列的(至少在SiemensCE中是这样的),由4E00到9FFF,所以我们可以按照这个顺序列出所有的汉字,然后在这些汉字里面挑选,不需要的,删除掉,那么生下来就是排列好的了
一个简单的C语言程序,循环,文件操作,按照windows下的unicode文本文件的习惯,文件开头加上FFFE,很容易就可以生成这样一个文档
然后我猜测可能小8支持的汉字不会超出GBK,简体中文XP支持的字符集应该是GBK,所以我把这个文档另存成ANSI的Unicode3.txt(现在已经改成Char.txt了),在这个范围内挑选,事实证明。。小8所支持的汉字的确是没有超出这个范围
而在SiemensCE中看到汉字的Unicode代码,可以看出,除了按照unicode排列,并且可能是较常用的汉字外,是没太大的规律的
挑选的过程没有什么技巧,就是用SiemensCE打开5508的FullFlash一个一个看,没有的删除,有的保留,在这里我选用了vim这个编辑器,在删除的时候可能会方便一些,因为vim用hjkl来移动光标,用x来删除字符,并且用3x这样的东西来一次删除3个汉字,如果有人想做Siemens其他机器的字体修改的时候(可能支持的汉字数量不同),这个方法也许是一种选择。
此处要注意的是,小8的Fullflash中的字体,不是完全按照unicode的,而是由一定的错位,所以要做一定的调整(Char.txt中已经调整了,一行就是在Fullflash中连续的一块)

2  生成c语言源文件

这时候就要用到FontGen了,为了方便,我们使用Char.txt中的第二行来作具体说明(Char.txt中一行就是一个在FullFlash中连续的块)。为了方便查看,我们把这一行复制到一个临时的文本中(我们把这个叫文本1),如图:
1.GIF


图中有个地方要注意,那就是那个“\”
,为什么汉字中会出现“\”呢?因为小8中存在一些不再索引中的字,通常表现为重复,所以在Char.txt中是存在重复字的,在Char.txt中这样的字通常在这样的字前面加“\”。表示后面的字出现两次。
搜索所有前面出现“\”的字,单独打开一个文档,把这样的字记录下来(如图,这里用来记录的文本我们管它叫文本2),并且删除文本1中的“\”。
2.GIF


从文件1中把这一行复制到FontGen中,然后做一些设置,具体如图:
3.GIF


然后我们导出这些字体,存起来,得到两个文件,假定是1.c,1.h。1.h可以删除,留下1.c
,因为FontGen会过滤掉重复的字,所以在1.c中要把这样的字重复一次。这就是我们要记录下以“\”开头的汉字的原因。
用任意的文本编辑器打开1.c,记事本就足够了,在里面搜索文本2中记录的汉字,每个字都重复复制一份,如图上的效果:
4.GIF
保存,这样我们需要用到的c语言源文件就完成了。


3  将C语言源文件转换成强刷的VKP

用vim打开上一步中做好的1.c,如果文件中含有^M样的字符,那么先执行下一条命令(如果没有,就不用执行)(直接输入,包括冒号,输入完后回车即可执行,以后相同):
:%s/^M//g
注意,^M的输入方法是:ctrl+v,ctrl+m
然后依次执行如下的命令
:%s/\t//g
:%s/^[^{].\+\n//g
:%s/[{,} ]//g
:%s/0x//g
:%s/^\(.\)/0c\1/g
:%s/\(.\)$/\10000/g
:%s/[\n ]//g

这些行表示的含义分别是:
去掉所有TAB键
去除所有非“{”开头的行
去除“{”,“,”,“}”,“ ”
去除“0x”
在每个非空行前加0c,表示字符宽度:12
在每个非空行后加0000,就是小8字体那多出来的那一行
去除所有换行及空格

这里有个简单的方法,将:%s/\t//g开始的部分存成VIM的脚本,然后调用,调用时执行的命令为(假定这个文件为Vkp.vim)
:so vkp.vim
这样就得到一样的结果,如图:
5.GIF


打开SiemensCE,查找该段的起始地址,贴在此文件的开头(我已将地址附在Char.txt中,在每一行的开头,不用再查了

使用命令
:wq
保存退出,或者使用菜单的保存及退出

4  调整并制作VKP

将1.c改名为1.vkp,复制一份5508的FullFlash,将1.vkp强刷进去。
这里有个问题,小8的字体是不同的,通常的字体是最右侧空一行,可是小8的是左侧空一行,所以所用的字都要向右移一格。此处有一个问题和一个技巧,分别是:
SiemensCE会根据字所占宽度调整,而我们不需要这样的调整,所以我们还要调整回来,按照下图设置会有一些方便的操作方式:
6.GIF


Charmap会一次移动一页,32个汉字,效率提高很多。
而去掉Hide witdh bytes则可以让我们在每个字上面看到表示这个字的宽度的部分,这样可以把注意力集中在字上面,然后调整,遇到图中所示的,则需要修改:
7.GIF


修改方法是,将ACW calculation前面的勾去掉,然后就可以在左边编辑宽度了,编辑后别忘记再把ACW calculation前面的勾再勾上,不然。。。你试试看就知道了:)

这里还有个要注意的地方,有些字明显小,可是宽度部分看起来也差不多,这个要留意。。那个也要修改


然后就可以得到一个改好了一段的FullFlash(不管是直接存成FullFlash,还是存成VKP后再刷),后面就简单了,用FullFlashComparer得到可以给5508使用的补定,我采用的是如下图的设置这样会整齐一些:
8.GIF


这里要说一下,为什么我做的vkp会有冲突,因为FullFlashComparer按照这样的方式生成的补定会包含一定的没有变化的数据,而这些数据可能是别人以前改过的,所以在最后一行,最好把不是中文字体的部分去掉,如下图:
9.GIF


左边的地址可以看出最后的地址是0x49FDE8,所以补定中的数据可改为下图:
10.GIF


这样,一段的补定就出来了,所花的时间不应超过15分钟,17个,累计时间不超过5个小时就搞定了。


其实,从这个过程中可以看出,Xinshou所说的只做繁体其实是比较麻烦的,因为繁体字的连续性差了很多,所以工作量大了很多。。。。。所以我不想做-_-UU

一直在弄这东西,可是总是不知道怎么表达,加上今天被灌酒了,不太清醒,表达不清楚的,大家多包涵,有问题就提,我尽我所能的回答:)


============================================================================
顺便加一个检查所挑选的汉字的方法

在挑选汉字的时候,可能会有少量的错误,想从这么多的字里面找出那几个错误,是很麻烦的,有一个方法,可以较为方便的检查所挑出的字。
原理如下:
我们在做字体补丁的时候,改的是字的外形,但是字的内码是没变的,比如会把“默”字显示成“黕”,但是,对于“黕”这样不支持的字,仍然是显示不出来的,显示为一个空白,所以,我们可以把char.txt放到手机里面去看,错误的字的地方会显示出一个空白(不支持的汉字的显示情况),依靠这一点,我们可以全面的检查一遍char.txt
这样的方法有如下的好处:
1. 全面检查,可以比较全面的查出错误的字
2. 可以分几次进行,一次检查少量,下次再继续进行,分几天完成,由阅读软件来帮你记录进度 :D
方法如下:
把char.txt放到手机中,使用文本阅读软件(比如MicroReader)来查看,发现了空白,就说明这的地方有一个错字,可以根据这个字附近的字来修正。

另外可以把char.txt里面每行开头的地址去掉,这样会排列得很整齐,如果出现了空白的话,也会很明显



[ 本帖最后由 LanEast 于 2006-10-12 18:12 编辑 ]

Char_P1.zip

17.03 KB, 下载次数: 27

评分

参与人数 1实力分 +2 金钱数 +10 收起 理由
巴戈 + 2 + 10 精品文章

查看全部评分

发表于 2005-12-20 23:29:30 | 显示全部楼层
真棒!高手啊!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-12-20 23:33:06 | 显示全部楼层
呵呵,你在线啊:)夜猫子啊:)
回复 支持 反对

使用道具 举报

发表于 2005-12-20 23:34:45 | 显示全部楼层
搞编程的都是夜猫子,哈哈。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-12-20 23:38:40 | 显示全部楼层
原帖由 wwssff 于 2005-12-20 23:29 发表
真棒!高手啊!


对了,关于汉化56版的事,我有个想法,或者说建议吧,你所知的资料应该足够让小8显示中文了,但是输入中文是一个问题,如果不能解决,使用者还是不会太多,那么让小8显示汉字的工作的意义就不是那么太大了,所以建议增加1,2个汉字来演示显示汉字的功能,然后先解决汉字输入问题,至少要在思路上弄清楚,这样才能保证汉字显示功能的实际功效,纯粹个人意见,随意处理:)
回复 支持 反对

使用道具 举报

发表于 2005-12-20 23:43:27 | 显示全部楼层
我汉字索引的前三个还不知道是什么,我还要弄明白点,汉字输入可以先玩着英文短信,也许还有人能解决,或者到时再来分析T9输入法。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-12-20 23:47:40 | 显示全部楼层
原帖由 wwssff 于 2005-12-20 23:43 发表
我汉字索引的前三个还不知道是什么,我还要弄明白点,汉字输入可以先玩着英文短信,也许还有人能解决,或者到时再来分析T9输入法。


嗯,弄明白前面那几个部分是影响显示汉字的关键,不过应该不是很难
另外一个问题是,那附近是否还有足够多的连续可用空间。。。。移动字体索引很可能就要改动写字符函数了。。
回复 支持 反对

使用道具 举报

发表于 2005-12-20 23:49:51 | 显示全部楼层
我没注意,我看看。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-12-20 23:50:54 | 显示全部楼层
回去睡觉了:)
8888

我明天也看看,挺好玩的:)
回复 支持 反对

使用道具 举报

发表于 2005-12-20 23:54:56 | 显示全部楼层
放字库的地方没有了,再往后还有很多空地,到时要抢占原来的字库的,我估计只要索引准确,放远点也没问题。
回复 支持 反对

使用道具 举报

发表于 2005-12-21 08:24:21 | 显示全部楼层
“这里有个问题,小8的字体是不同的,通常的字体是最右侧空一行,可是小8的是左侧空一行,所以所用的字都要向右移一格。”
以上一步好像挺复杂。可否干脆就用最右侧空一行的字体,省掉这一步,反正都是在替换字体。
回复 支持 反对

使用道具 举报

发表于 2005-12-21 08:25:53 | 显示全部楼层
好贴!楼主费心了:)
回复 支持 反对

使用道具 举报

发表于 2005-12-21 08:28:24 | 显示全部楼层
原帖由 LanEast 于 2005-12-20 23:47 发表


嗯,弄明白前面那几个部分是影响显示汉字的关键,不过应该不是很难
另外一个问题是,那附近是否还有足够多的连续可用空间。。。。移动字体索引很可能就要改动写字符函数了。。


放的空间嘛,我在一篇贴子里通过CE比较出来过,在后面有大排空地,比55版所放汉字占用的空间还要大些。这倒不是问题。
回复 支持 反对

使用道具 举报

发表于 2005-12-21 08:31:27 | 显示全部楼层
原帖由 Xinshou 于 2005-12-21 08:24 发表
“这里有个问题,小8的字体是不同的,通常的字体是最右侧空一行,可是小8的是左侧空一行,所以所用的字都要向右移一格。”
以上一步好像挺复杂。可否干脆就用最右侧空一行的字体,省掉这一步,反正都是在替换字体。


小8是默认左靠。这样可能出现一个问题就是每一行的字都粘在一起了。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-12-21 08:52:11 | 显示全部楼层
原帖由 Xinshou 于 2005-12-21 08:24 发表
“这里有个问题,小8的字体是不同的,通常的字体是最右侧空一行,可是小8的是左侧空一行,所以所用的字都要向右移一格。”
以上一步好像挺复杂。可否干脆就用最右侧空一行的字体,省掉这一步,反正都是在替换字体。


那样中英文混合的时候就比较麻烦了,除非将Normal的字体全部换掉,不然很可能字会连到一起
回复 支持 反对

使用道具 举报

发表于 2005-12-21 09:22:08 | 显示全部楼层
强人,大大的顶~~~~~~~~~
回复 支持 反对

使用道具 举报

发表于 2005-12-21 13:24:47 | 显示全部楼层
呵呵
强人
好东西
重在思路啊还是
回复 支持 反对

使用道具 举报

发表于 2005-12-21 13:37:15 | 显示全部楼层
绝世好贴。。。。。。。。。
回复 支持 反对

使用道具 举报

发表于 2005-12-21 16:19:13 | 显示全部楼层

回复 #18 wise2008 的帖子

哈哈,将搬运工的工作,以起重机代之。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-3-11 19:00:15 | 显示全部楼层
改正了Char.txt中的错误...
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员 微信登录

本版积分规则

小黑屋|Archiver|手机版|爱技术 ( 沪ICP备08115260号-3 )

GMT+8, 2024-5-18 05:47

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2020, Tencent Cloud.

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