处理编码问题利器之文本编辑器⑴——MadEdit
http://www.vim.org/http://sourceforge.net/projects/madedit/
?
先说后者吧,它有些像 UltraEdit,可能更平易一些。是一个台湾人写的软件,中文支持不错,可惜目前无人维护,我有接手它的想法。
MadEdit 内置四种语法高亮风格,这是 Dark 风格下 python 程序语法高亮效果。
?
UltraEdit(下文简称 UE)所具有的语法高亮、多文件查找替换、正则匹配、编码识别和转换、列编辑和十六进制编辑这些功能,MadEdit 都具有。若未用到 UE 更多的功能,甚至可以用它作为 UE 的替代品。
?
值得一提的是,MadEdit 有两个方面完胜 UE,分别是十六进制编辑和编码的识别/转换。我就是在寻找更好的十六进制编辑器时发现 MadEdit 的,它的十六进制编辑功能的确强大。这里只说编码相关的,它的十六进制编辑功能有两处编码相关的特性明显优于 UE:
1、十六进制编辑模式,右侧文本区域可以按各种支持的编码显示,而 UE 只有当前 locale 或者 UTF-16 两种编码支持。
2、MadEdit 十六进制编辑显示的时原始二进制信息,如有 BOM 的 UTF-8 文本开头一定是 EF BB BF,而 UE 无论有没有 BOM 一律按照有显示,无论 UTF-8、UTF-16、UTF-32 一律按照 UTF-16 显示。
?
以经典的 Big5“許功蓋”问题为例:
打开该对应文本,MadEdit 可自动识别为 Big5 编码,然后切换到十六进制编辑模式,如上图。可以看出 MadEdit 在简体中文(GBK/CP936)的操作系统环境中编辑 Big5 文本,其十六进制编辑模式的右侧文本区域还是可以正常按 Big5 编码显示,且显示的是原始十六进制数据。另外可以看到其状态栏会显示文件的编码及行尾符信息。
?
然后从“查看->编码->所有编码”选择“ISO-8859-1”(或者“CP437”等,总之就是选一个 8bit 编码)再看:
?切换编码的同时,右侧文本区域会同步更新,如图所示。这样就不难理解“許功蓋”问题本质了:因为这些汉字的 Big5 编码的第二个字节是“\”,“\”这个字符在很多编程语言如 C、Bourne Shell、MySQL 等中都是用作转义字符,如果把这样的汉字当作西文(如 ISO-8859-1)来处理就可能引发编译错误、SQL 注入等问题。
?
不妨继续拿这几个字的文本为例来看 UTF-x 和 BOM 的情况。先列下文件列表,其中文件名以 b 结尾的包含 BOM,文件名中 le 表示小端次序、be 表示大端次序:
?-rw-r--r--??? 1 jyw????? Administ?????? 10 Jan 23 16:38 許功蓋u16le.txt?-rw-r--r--??? 1 jyw????? Administ?????? 12 Jan 23 16:38 許功蓋u16leb.txt?-rw-r--r--??? 1 jyw????? Administ?????? 20 Jan 23 16:39 許功蓋u32be.txt?-rw-r--r--??? 1 jyw????? Administ?????? 24 Jan 23 16:39 許功蓋u32beb.txt?-rw-r--r--??? 1 jyw????? Administ?????? 11 Jan 23 16:36 許功蓋u8.txt?-rw-r--r--??? 1 jyw????? Administ?????? 14 Jan 23 16:37 許功蓋u8b.txt
可以看出包含 BOM 的文件要比同编码不含 BOM 的文件多几个字节(UTF-8:3、UTF-16:2、UTF-32:4),即 BOM 所占字节数。
?
直接打开这些文件,MadEdit 当可自动识别它们的编码(UTF-8 无 BOM 的可能识别有误)。这也是 MadEdit 适合编码(尤其中文)相关处理的又一亮点。
分别切换各个文件,可以从状态栏很方便地看到各文件的 UTF-x 属性,以“許功蓋u32beb.txt”为例:
这些文件状态栏显示 UTF-x 信息为:
?許功蓋u16le.txt?? UTF-16LE?許功蓋u16leb.txt? UTF-16LE.BOM?許功蓋u32be.txt?? UTF-32BE?許功蓋u32beb.txt? UTF-32BE.BOM?許功蓋u8.txt????? UTF-8?許功蓋u8b.txt???? UTF-8.BOM
编码、大小端次序、有无 BOM 都包含了。
?
通过 MadEdit 也可以很容易转换编码或者增删 BOM:
转换编码:“工具->转换文件编码…”然后选择新的编码即可。增删BOM:“工具->有/没有Unicode BOM->删除/插入BOM”即可。此外 MadEdit 的十进制插入、删除、替换都要比 UE 更加强大和易用。
MadEdit 还支持字数统计、中文简繁转换等中文相关特殊功能。当然它的简繁转换效果不好,这是我打算接手并改善的地方之一。
MadEdit还适合打开比较大(如 100M 以上)的文件,它打开大文件时默认以十六进制模式打开。
其他的 MadEdit 功能可以浏览下它的各个菜单,很清晰的。
?
如果没有其他 UE 特有的高级功能还在用,以免费、开源的 MadEdit 来代替昂贵的 UltraEdit 是个不错的选择。
?
有任何问题和建议可以留言,或者发邮件给我 jiaywe[at]gmail.com。