扁担兄的原文是11月13日的贴子:http://club.excelhome.net/viewthread.php?tid=69746
==========================
有意思,我为解决这个问题,发现了很多平时没有注意到的东东!
试了半天,终于发现了问题所在——楼主扁担兄的原文件是XP做的(提示中有“word 9”字样),而我这里是2000(word 8),怪不得替换文件头不成功。
干脆先说结论,后面再谈我的恢复思路:
1、楼主所给的原文件谁也没有办法给你读出来!(除非知道微软的编码方法!),在保证文件“内容部分”的编码没有被损坏的前提下,唯一能读出来的,是这个文档最后一次正确保存时所用的机子、用户与相应的word版本!(为什么会这样要求,我后面会解释。)
2、仅仅就楼主给出的文件来看,肯定是不能恢复了!原因很简单——打开文件时,看似文件内容还在,只是没有正常显示,而事实上文件内容已经“洗白”了,在十六进制编码中“似乎有文字的区域”全是编码“0045595E”,就算现在知道编码“0045595E”对应的中文是哪个字,恢复过来,也不外乎就满篇都是那一个字而已!!
下面给出今后遇到这种现象时,可以一试的解决办法,请注意——必须在被损坏文件所在的机子上,用相同的用户名操作:
假定被损坏的文件为“A.doc”,损坏现象为打开时显示为乱码,或打开时要求你选择打开的编码方式,我是这样解决的——
新建一个文档另存为“B.doc”随便输入一个字,比如“我”,找一个支持十六进制与ASCII编码的编辑工具(网上有下载,或者干脆就用微软dos下的edit.exe也行),分别打开b.doc与a.doc,两相比较,会发现编码中有很多相同的地方。在b.doc中找到“我”字以前的编码,复制粘贴并覆盖掉a.doc前面的编码,保存,退出,再打开,问题不大的话,基本能恢复(我是刚才手工做了一个损坏的doc文件来试的,成功。而我在十六进制下开始没有注意到,在ASCII下才发现楼主用的是XP而我现在用的是2000,文档的编码上可能就有出入)。
如果你用的是win2000以上的话,我推荐你使用命令行下的“文件比较命令”——FC,它可以直接以十六进制、二进制、ASCII方式等对文件进行比较,并生成比较结果,用法:“FC 第一个文件 第二个文件 > 比较结果.txt”(请注意中间有个大于号!“>”号将比较的结果定向导入于结果文件中。),FC详细的使用帮助在命令行下输入FC/?可以得到!也可以直接找微软的帮助文件。
为什么必须要在被损坏文件所在的机子上,用相同的用户名操作呢?
正因为我是用文本工具打开DOC文件的,结果发现文件中除了保存有文章本身的内容外,居然还保存有计算机名、用户名、office版本号、windows根目录路径、上一次是从哪个路径下的哪个文件里复制了内容到本文件中、本文件当前绝对路径、创建与编辑时间………………………………
不知道微软这样搞有没有侵犯用户隐私权的问题?文档中搜集这些信息干什么?但也正因为这个问题,所以,别人的文档,你来替换它的文件头恐怕行不通(这个没法验证,只是我的感觉)!
============================================
就此问题,再谈点其他的东东——
不知道大家用过命令行下的“FC”没有?这个就是“文件比较命令”,用它能做的事儿还很多,除了像上面解决方法中那样比较文件外,比如这样:
新建A.doc保存在C盘,然后给该文档加密码,加密后另存为B.doc,然后在命令行下输入“C:\fc c:\a.doc c:\b.doc > c:\e.txt”大家想想,a.doc与b.doc的差别只是一个密码的问题,最后你会在记录两相比较的结果的e.txt中得到什么??
如果你问我——这有什么用?别人加的密的文档你又没有“没有加密的文档”来做比较!那我就无话可说了!
用十六进制工具分别打开a.doc与b.doc,很容易找到“标记”密码的“标签”,这标签可是不会变的哟!!
今后再拿到有密码的文件………………(我只说这是个思路,我没有说过这能拿来干什么!)
============================================
多做几次上面那样的比较,你很快就能发现Doc文件的其他“标签”,比如,哪两个标签间,是记录文档编码方式、字体字号行距边距……等设置信息的,哪个标签间放的是文档的正文,哪个标签间又记录着文档的“属性”和其它附加信息……
事实上我们遇到的乱码等问题,不外就是标签被破坏了,或标签内信息丢失,因为“文档编码方式”标签本来就放在文档的“头”部,所以只需要用正确的标签覆盖损坏的就行了。
============================================
最后说一下,
毕竟我们不是在搞文档编码方式的破解,上面内容只供大家参考,某些思路,请勿用在不当的地方。 |