第三课:A码的汉化与借位
教程作者:许愿
讲解人员:摩登
发布人员:呓语晨羊
前期回顾:
首先我们回顾一下上次学过的内容,A码即ASCII码,是美国标准信息交换码的英文缩写。它是用一个八位二进制数来表示一个符号(字符)。
例如字母“A”用二进制数01000001表示,其相应的十进制数是65,十六进制数是41H。手机软件中字母的A码都是指该字母的8位二进制数转换成十六进制数的值。一个英文字母占1个字符.一个汉字占2个字符,汉字字符2字节,英文字符1字节,中文标点2字节,英文标点1字节,所以有时标点符号都不能搞错!
本期内容:
又以PhoNetInfo这个软件为例,我们先安装软件,安装后打开软件按左软键打开菜单,有About,Reboot device,Exit三组英文 如图1
以About为例吧,我们先打开x-plore找到语言包位置按菜单\文件\用十六进制查看模式打开PhoNetInfo.rsc 如图2
打开后按左软键选择编辑,然后再左软键选择查找字符,输入About注意大小一定要分清 会找到结果 如图3
大家看About的字符串是41626F7574前面还有两个字节是0505,这两个字节"0505"是About的A码指针,其作用是用来指示字串的长度及字符数的,是用16进制的计数方式,这两个字节"0505"是About的A码指针,其作用是用来指示字串的长度及字符数的,是用16进制的计数方式,我们前面学的16进制现在修改指针就用上了,前面一个05代表这个字串有5个字符,简单点来说就是有五个英文字母,后面的05代表这个字串是由5个字节构成(也就是41 62 6F 75 74这5个字节构成),对于英文字符来说,有效字符和字串长度是一样的,但要汉化成中文就不同了,我们必须用中文的Unicode字符去替换,因为只有Unicode字符才能正常显示中文,但是我们不能直接替换成“关于”这两个字符的U码代码,中文编码的使用是需要加上标识符的,这个标识符是以0F开头(表示以下内容为Unicode编码),以E0结尾(E0表示以后为ASCII编码)。其实只要有0F就行了,结尾有没有E0无所谓,不过有时你剩下一个字节你如果用U码就不够了,这时就要用E0来代替。
大家注意0是阿拉伯数字0
现在我们到功能表打开十六进制转换器,打开后按选项再选择转换,弹出输入框后要我们输入中文,我们就输入About的中文意思“关于”,确定后关于的U码显示在屏幕上,我们先记住这段代码如图4
再返回刚才X管理器十六进制界面,将"About"的A码的字串"050541626F7574"要改为中文的U码的"关于"的字符串就是"02050F51734E8E" 如图5
这个字符串中:02表示有两个有效字符(即关于两字),05表示仍然占用五个字节(即0F 51 73 4E 8E这5个字节),0F表示以下的字节为U码,5173 4E8E分别是刚才转换“关于”两字的U码代码
好!我们先保存打包看看效果 如图6
上面讲的是A码的基本汉化,下面接着讲A码借位
这次的课程有点难度,如果你用心来听多点练习其实也不是很难。
我们还是以上次PhoNetInfo未完成的任务接着讲,我们上次已经把About汉掉了,现在我们也把Reboot device和Exit汉成中文,还是用x-plore管理器以十六进制模式打开PhoNetInfo.rsc语言包,按我们上次讲过的一样,先按选项选择编辑,再选查找输入Reboot device找到它的位置,Exit也在下面,看 借位图1
我们可以看到Reboot device的16进制编码为0d0d5265626f6f7420646576
难题出现咯!怎样才能把Exit汉成我们的中文“退出”呢?大家又看看Reboot device,它有13个字节,如果汉成“重启手机”还多几个字节的,而多出来的字节只能用00或20来填充,太浪费了。那我们就代表Exit向Reboot device借一个字节来用用吧,这个是有借没还的,呵呵~
我们把光标移到Reboot device的16进制编码区,大家看 图2
在指针0d之后17之前按C键随便删去一个字符,这里我删的是o,然后我们到Exit那按左软键选择插入模式任意插入一个字符,我加了个45也就是E的编码。借位之后别忘了修改Reboot device和Exit前面的指针,把Reboot device的两个0d 改成0c,Exit的两个04改成05
(开始Reboot device是13个字节,指针是0d,被Exit借了一个,现在剩下12个所以是0c,而Exit开始是4个字节,现在加了一个变成5个,所以是05)
好,按右键保存后退出x-plore,打包了签个名看看效果吧。 图3
大家看看Reboot device变成了Rebot device,Exit变成了EExit,我们借位成功了,接下来的是把它们改成我们中文的U码。我们把Rebot device的字符串0c0c5265626f742064657669
再给大家重复指针是怎么得来的:05是指91cd 542f 624b 673a 0020这5个汉字U码代码,0020是空格,0c是指这段代码有12字节,即是0f 91 cd 54 2f 62 4b 67 3a 00 20 e0这12个字节,e0是后面剩下一个字节,用U码不够所以用e0补,e0也就是代表下面为A码 如图4
下面有几个注意点,是许愿师傅近年来汉化失败经验的总结:
1.每个字符 后接的17到第二个字符的数据指针之间都为系统数据,不能更改
2.借位后字符的数据指针不能忘记修改
3.借位只能在同级菜单内进行,就拿这个软件做例子,由于About只有5字节自身都难保了,所以Exit只能问Reboot device借位,而不能问上面菜单的General借,人家是不会借的,呵呵。
我来说说我的感觉。重复指针这里要严重感谢摩登,许愿的教程没有说明重复教程!