64位Win7下转码TXT的一种简单方案

转码一直是windows系统下的一个无比蛋疼的问题。对于我个人来说,转码主要是从日文编码(shift-JIS)、小部分从繁体中文编码(big-5)转换。需要被转码的东西无外乎两类:一是ANSI程序,二是含有ANSI编码内容的文件。可以使用的软件包括微软自己开发的Applocale、色神开发的NTLEA、soraapp以及后面一个叫什么NTLE啥啥的记不清了。转码程序很好理解,而“转码文件”的概念,本质上就是先用转码软件对该文件的打开方式程序进行转码,之后再打开该文件,可以看到无乱码的内容(如,txt、zip等)。前者不再赘述,对于后者,最大的一个问题就是“方便性”这点。好比转码winrar这点,applocale就可以做到,但是方便吗?你需要先用applocale加载winrar(到这步你还可以做一个快捷方式),然后再在winrar里逐步找到你需要打开的那个zip文件。而这明显与常人喜欢用资源管理器查看文件这一习惯相悖。NTLEA开创了一种方式,就是他加载的参数,不止可以是exe,而是可以是任意文件类型;其效果就相当于前面所描述的,用它转码该文件的默认打开方式程序,然后打开该文件。这样,如果我需要转码查看一个ZIP,之需要在其之上按下右键,选择“用NTLEA打开”就可以了,相当的方便。

可惜在升级了64位的Win7之后,NTLEA这个一直停留在0.87版本的软件就没法正常运行了(准确地说是对win7支持都不好)。所幸我很快找到了一款替代软件:soraapp,同样是由色神开发的,而且操作比NTLEA更简单,只需要安装一次之后,即可在右键菜单找到“以日文环境打开”/“以繁体中文环境打开”的选项,选用就可以,依然支持所有文件类型,而不是applocate那样残废地只支持exe。不过另外一个问题在于,几乎所有的转码软件都不支持64位程序,包括soraapp。对于最常用的两个软件,winrar和notepad,恰好都是(有)64位的。不过还好,我们可以选择安装32位的winrar,性能上并不会损失太多。但是notepad是系统内置的程序,怎么办呢?

所幸不知道是处于兼容性还是什么原因考虑,其实系统里就备有32位的notepad程序,位于:C:\Windows\SysWOW64\notepad.exe 但是我们应该怎么办呢?直接替换系统里的notepad.exe?或是把txt类型关联到它身上?听起来都不怎么让人舒服。

直到某一天,我无意尝试用soraapp打开被我关联到notepad的cue文件,发现居然被转码了!这是个很奇妙的现象,因为cue的打开方式显然应该是64位的notepad,soraapp应该转码不能才对啊?而且我已经试过无数次用soraapp打开过txt,确实是无法转码才对。打开任务管理器看一看——咦,这个notepad.exe进程后面居然有*32?再打开文件位置——就是刚才提到过的“C:\Windows\SysWOW64\notepad.exe”。

那么为什么.cue和.txt的打开方式会不同呢?让我们去注册表看看。关于文件关联的键值控制,请参见之前的文章。首先看CUE的,位于“HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.cue\UserChoice”里的Progid项。其键值是Applications\notepad.exe。让我们找到这个类里是怎么写的,位于“HKEY_CLASSES_ROOT\Applications\notepad.exe\shell\open\command”——其键值是%SystemRoot%\system32\NOTEPAD.EXE %1:注意,不是windows下面那个notepad,而是在system32下,而且是相对路径。看来,如果用soraapp尝试调用这个的话,大概由于一些接口的缘故,会自动调用32位版本以兼容,从而可以正常转码。虽然具体原理不明白,至少知道“这样可以”;那么为啥txt就不行了呢?我们打开HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.txt,咦没有UserChoice?哦没关系,看一下HKEY_CLASSES_ROOT\.txt里面的默认键,是txtfile。那么我们定位到它——HKEY_CLASSES_ROOT\txtfile\shell\open\command,看他的键值,居然是C:\Windows\notepad.exe %1?怎么回事,为什么是绝对路径?而且不是system32下那个,难怪soraapp打开它不会自动调用32位版。我们可以它他的的键值直接用上面写的那个替代,就OK了;但是我发现一个很奇怪的现象,就是这个键值过一段时间就会自动恢复原始值,也许是因为这是系统级的键值的缘故?不过我们可以直接修改.txt的打开方式(添加个UserChoice目录)为Applications\notepad.exe,就OK了。

不过最近又发现一个很奇怪的问题,如果把那个32位的记事本exe拷贝到别的地方,居然无法运行,谁知道是怎么回事吗?自愈了囧

Advertisements

2 thoughts on “64位Win7下转码TXT的一种简单方案

发表评论

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / 更改 )

Twitter picture

You are commenting using your Twitter account. Log Out / 更改 )

Facebook photo

You are commenting using your Facebook account. Log Out / 更改 )

Google+ photo

You are commenting using your Google+ account. Log Out / 更改 )

Connecting to %s