处理编码问题利器之文本编辑器⑴——wxMEdit

工欲善其事,必先利其器。
——《论语》

好的工具的确能让工作事半功倍,尤其处理棘手的疑难问题时。接触过不少文本编辑器,其中有两个我觉得称得上处理编码问题的利器:Vim wxMEdit,都是跨平台的开源软件。


Vimhttp://www.vim.org/
wxMEdithttp://wxmedit.github.io/

 

先说后者吧,它有些像 UltraEdit,可能更平易一些。本文早期版的这个编辑器本来是 MadEdit 的,大约是一位台湾朋友写的软件,中文支持不错,可惜目前无人维护。本来这也无妨,可是最近发现了它一个严重的 bug,可能会造成数据损失,于是 fork 了这个项目,就是 wxMEdit。fork 这个项目不久,目前只是修改了这个最近发现的 bug,并未引进更多功能,以下的这些功能都是从 MadEdit 继承来的,图就继续用原来 MadEdit 的图好了。

MadEdit 内置四种语法高亮风格,这是 Dark 风格下 python 程序语法高亮效果。

 

UltraEdit(下文简称 UE)所具有的语法高亮、多文件查找替换、正则匹配、编码识别和转换、列编辑和十六进制编辑这些功能,wxMEdit/MadEdit 都具有。若未用到 UE 更多的功能,甚至可以用它作为 UE 的替代品。

 

值得一提的是,wxMEdit/MadEdit 有两个方面完胜 UE,分别是十六进制编辑编码的识别/转换。我就是在寻找更好的十六进制编辑器时发现 MadEdit 的,它的十六进制编辑功能的确强大。这里只说编码相关的,它的十六进制编辑功能有两处编码相关的特性明显优于 UE:

1、十六进制编辑模式,右侧文本区域可以按各种支持的编码显示,而 UE 只有当前 locale 或者 UTF-16 两种编码支持。

2、wxMEdit/MadEdit 十六进制编辑显示的时原始二进制信息,如有 BOM 的 UTF-8 文本开头一定是 EF BB BF,而 UE 无论有没有 BOM 一律按照有显示,无论 UTF-8、UTF-16、UTF-32 一律按照 UTF-16 显示。

 

以经典的 Big5“許功蓋”问题为例:

打开该对应文本,wxMEdit/MadEdit 可自动识别为 Big5 编码,然后切换到十六进制编辑模式,如上图。可以看出 wxMEdit/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 所占字节数。

 

直接打开这些文件,wxMEdit/MadEdit 当可自动识别它们的编码(UTF-8 无 BOM 的可能识别有误)。这也是 wxMEdit/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 都包含了。

 

通过 wxMEdit/MadEdit 也可以很容易转换编码或者增删 BOM:

  • 转换编码:“工具->转换文件编码…”然后选择新的编码即可。
  • 增删BOM:“工具->有/没有Unicode BOM->删除/插入BOM”即可。

此外 wxMEdit/MadEdit 的十进制插入、删除、替换都要比 UE 更加强大和易用。

wxMEdit/MadEdit 还支持字数统计、大小写转换、全半角转换、中文简繁转换等中文相关特殊功能。当然它的简繁转换效果不好,这是我打算接手并改善的地方之一。

wxMEdit/MadEdit 还适合打开比较大(如 100M 以上)的文件,它打开大文件时默认以十六进制模式打开。

其他的 wxMEdit/MadEdit 功能可以浏览下它的各个菜单,很清晰的。

 

如果没有其他 UE 特有的高级功能还在用,以免费、开源的 wxMEdit 来代替昂贵的 UltraEdit 是个不错的选择。

 

有任何问题和建议可以留言,或者发邮件给我 jiaywe[at]gmail.com。

你可能感兴趣的:(编码,16进制,MadEdit,编辑器,十六进制编辑)