论坛风格切换切换到宽版
  • 7626阅读
  • 12回复

请详解一下为何有时非标要“多余补空格”? [复制链接]

上一主题 下一主题
离线hktkzyz
 

发帖
36
金钱
360
威望
36
只看楼主 正序阅读 0 发表于: 2013-12-20
最近遇到一个小麻烦,用点睛汉化非标(编码是unicode)后,要么是不显示,要么就是只显示它,旁边的东西不显示了。
换到16进制里去改,也是如此,反复n次后,我在16进制里用20代替了00,没问题了,突然想到点睛里有个“多余补空格”,在点睛里勾上这项,也没问题了。

我想问一下:
1、谁能详解一下为何程序里会存在补充00和20(空格)这两种情况呢?
2、有没有方法可以一下判断出是否是补20(空格)?(例如,是否unicode就要补20,ascii不补20?)
离线benteng

发帖
17
金钱
50
威望
5
只看该作者 12 发表于: 2013-12-28
回 2楼(gnatix) 的帖子
gnatix:通常是补 00。但是如果字串有长度标识的话,那么汉化时要么补00,但是相应修改长度标识,要么补空格,保持原来的长度。补空格总是不会错的,最保险,但是可能会影响界面的美观。 (2013-12-20 21:24) 

同一个观点.
离线wanfu

发帖
2734
金钱
12170
威望
1217
只看该作者 11 发表于: 2013-12-26
好的,我看看
离线hktkzyz

发帖
36
金钱
360
威望
36
只看该作者 10 发表于: 2013-12-26
wanfu版主,能否有时间移步http://bbs.hanzify.org/read-htm-tid-98050.html这里,帮我看一下,这个程序里的部分资源无论如何无法找到,能帮我看一下,这资源是藏在哪里吗?
离线wanfu

发帖
2734
金钱
12170
威望
1217
只看该作者 9 发表于: 2013-12-25
谢谢您,我没有WIN8的机器,WIN8下没有测试,改天装一个试试看。
离线hktkzyz

发帖
36
金钱
360
威望
36
只看该作者 8 发表于: 2013-12-25
回 7楼(wanfu) 的帖子
wanfu:这个宏只是提取非标字串并将翻译按照选定的字符编码和字串类型的要求写入到文件中,并不能修改对话框的字体。要修改对话框字体,请先选定 Passolo 中的简体中文的翻译列表,然后选择“方案 .. (2013-12-24 09:46)

谢谢wanfu版主,您理解错了我的意思,我不是汉化后都?号,而是打开宏时,宏的对话框是?号。
不过解决了,原来是win8的问题,我在虚拟机用xp,打开宏,没有问题。

这个宏我之前在win8下也用过,也是正常的,但针对GifCam这个程序,就不能使用了,我想可能是宏本身调用系统文件的问题。

又想了想,可能不是宏本身的问题,而是passolo在win8下运行不好,因为我在xp可直接认出GifCam的语言,而在win8下passolo却认不出语言。
离线wanfu

发帖
2734
金钱
12170
威望
1217
只看该作者 7 发表于: 2013-12-24
这个宏只是提取非标字串并将翻译按照选定的字符编码和字串类型的要求写入到文件中,并不能修改对话框的字体。
要修改对话框字体,请先选定 Passolo 中的简体中文的翻译列表,然后选择“方案 -> 语言设置”,按下图进行设置,并生成目标文件后再用宏写入。


离线hktkzyz

发帖
36
金钱
360
威望
36
只看该作者 6 发表于: 2013-12-23
回 5楼(wanfu) 的帖子
版主,我用的是“Passolo 非标字串宏 2013.11.14 (Build 131116) ”这个版本的宏,passolo用的是2009版,但我用宏时,出现错误,都是问号,请问是哪里问题?
离线wanfu

发帖
2734
金钱
12170
威望
1217
只看该作者 5 发表于: 2013-12-21
LZ 的这个文件是 Delphi 编写的程序,选定的这个 Frame 字串,前后有二个空格,一共7个字符,14个字节。从其字串前面的字节结构来看,是典型的 Pascal 字串,即 Delphi Unicode 字符串。Pascal 字串有以下几种类型:

- Pascal 字串 (即 Delphi Unicode 字符串,仅在 Delphi 2009 及以上版本中存在)
  字节块以双空字节结束,可能包含空字节。每个字节块前,依次有 2 个字节的代码页、2 个字节的每个字符字节数、4 个字节的引用次数、4 个字节的字串字符数标志。

- Pascal 宽字串 (即 Delphi Wide 字符串,仅在 Delphi 中存在)
  字节块以双空字节结束,可能包含空字节。每个字节块前,依次有 4 个字节的字串字节长度标志。

- Pascal 长字串 (即 Delphi Ansi 字符串,仅在 Delphi 中存在)
  字节块一般以空字节结束,不包含空字节。每个字节块前,依次有 4 个字节的字串引用次数、4 个字节长度标志。

- Pascal 短字串 (即 Delphi Short 字符串,仅在 Delphi 中存在)
  字节块没有特定的结束标志,不包含空字节。每个字节块前,依次有 1 个字节的字串字节长度标志。

从 B0 04 20 00 FF FF FF FF 07 00 00 00 起,依次为 B0 04 为字串代码页,值为1200,正好是 Unicode 代码页值,20 00 为每个字符的字节数,值为2,正好和 Unicode 字符都是2个字节吻合,FF FF FF FF 为引用次数,值为-1,07 00 00 00 为字符数。

Passolo 非标字串宏不仅可以自动识别该文件为 Delphi 程序,还可以提取并识别这个字串为 Delphi Unicode 字符串,写入时不仅会自动修改字串长度,还能修改代码页,非常自动化。

离线gnatix

发帖
7696
金钱
-8279
威望
-828
只看该作者 4 发表于: 2013-12-21
FF FF FF FF 07 是长度标识。
你的例子是 Delphi 类型软件的 Unicode 字串。“点睛助手” 这个工具可以处理 Delphi 类型软件的 Unicode 字串,也就是说你不必补空格,软件会自动调整长度标识。