cnbook/TextPro6应用1:“字符实体”类型邮件乱码的分析

cnbook/TextPro6应用1:“字符实体”类型邮件乱码的分析

假设你收到一封邮件,邮件的内容是:

À´ÐÅÊÕµ½£¬Ð»Ð»

你能分析出这封邮件其实是在说“来信收到,谢谢”吗?本文讨论了这种乱码的由来,介绍了一种简单的解码方法。

1 乱码由来

很多情况都会产生乱码,处理的方法也各不相同。本文所说的这种乱码,它的文本中包含大量类似“À´”这样的字符串。熟悉HTML的朋友都知道这些字符串就是HTML中的字符实体。

1.1 字符实体

HTML为一些字符定义了特殊的表示方式,即字符实体。字符实体有两种形式:命名实体和数字实体。命名实体的格式是:

&字符名称;

例如“&”表示“&”,“À”表示“À”。数字实体的格式是:

&#字符的10进制Unicode编码;

例如“&”表示“&”,“À”表示“À”。

1.2 产生乱码

我们可以用CodeView查看“来信收到,谢谢”的编码,它的GBK编码是:

C0 B4 D0 C5 CA D5 B5 BD A3 AC D0 BB D0 BB

有的软件系统不支持中文,它把这些非ASCII字符(字节高位为1)用命名实体表示。例如用“À”表示C0,用“´”表示B4,这样就产生了前面提到的乱码:

À´ÐÅÊÕµ½£¬Ð»Ð»

2 解析乱码

解析这种乱码的方法是很明显的:

  1. 将命名实体或数字实体映射到对应的编码。
  2. 用常见的编码方式分析文本编码,得到有意义的文本。

根据这个思路,我们可以写一个小程序实现解码功能。不过我目前没时间写这个程序。本文介绍的方法是用我以前写的两个小工具解码: cnbook下载) 和 CodeView。CodeView可以查看文字编码。cnbook是我为自己定制的记事本(未完成)。

假设我们已经得到乱码邮件对应的编码,例如“C0 B4 D0 C5 CA D5 B5 BD A3 AC D0 BB D0 BB”,我们可以在CodeView中将编码转换到文本。我们可以按照GBK、big5等常见编码方式解码,直到得到有意义的文本。那么我们怎么从乱码邮件地得到CodeView期望的文本形式的编码呢?我们可以用cnbook的“自定义替换表”。

2.1 解析过程

cnbook允许用户自定义一张替换表,然后按照替换表中的所有替换对,替换指定或全部文本。我已经定义并装载了一张转换字符实体的替换表,下面简单描述解码过程:

  1. 将要分析的乱码复制到cnbook。
  2. 通过右键菜单选择“自定义替换->字符实体到编码”,就可以将乱码文本映射到编码。

  3. 将编码文本复制到CodeView,将编码转换到文本。

3.3节会介绍这张替换表作了哪些替换。

3 cnbook/TextPro6的替换功能

简要介绍与本文有关的cnbook功能。这里的介绍也适用于TextPro6

3.1 自定义替换

要使用cnbook的自定义替换功能,用户要先准备一张替换表。替换表是一个文本文件,每行的格式是:

源字符串=目标字符串

注释行以“=”开头。如果字符串包含“=”,必须写成“\=”。如果字符串包含“\”,必须写成“\\”。准备好替换表后,在cnbook中通过“设置->自定义替换表”进入自定义替换表的设置。

cnbook允许用户设置30张自定义替换表。选择要设置的替换表序号,点击“设置”按钮选择替换表源文件。点击“选项”按钮设置替换选项。“字符实体到编码”替换表的选项是:

设置后好,就可以通过编辑菜单或右键菜单执行自定义替换了。cnbook将替换表源文件和替换选项保存到cnbook所在目录的文件“tables\n.tab”,其中n是替换表序号。替换表的作者只要发布tab文件,其它用户就可以分享他的替换表。一个较好的做法是在发布tab文件的同时发布替换表源文件,在源文件开头用注释行说明替换选项。

3.2 替换选项

“使用转义符”选项设置是否解释替换字符串中的转义符。cnbook目前支持以下转义符:

\\字符'\'
\n代表连续的回车符(0D)和换行符(0A)
\t制表符(09)
\x"1-6位16进制数"代表16进制Unicode编码对应的字符。
例如“\xA0”就是Unicode编码为0xA0的字符。
在替换表源文件中,“\”要写成“\\”。

还有一个需要解释的选项就是“快速替换”。这个选项控制替换的过程:

  1. 如果没有选择“快速替换”,替换表的执行过程就是顺序执行替换表中的每组替换。执行每组替换都会扫描全部文本,后面一次替换是在前面一次替换的结果上进行的。这时,替换的顺序可能影响替换的结果。
  2. “快速替换”只扫描一次文本。程序首先计算替换表源字符串的最大长度。扫描时从这个最大长度开始在替换表中查找匹配的源字符串。所以“快速替换”在每个扫描点会优先匹配最长的字符串。“快速替换”不支持正则表达式,因为使用正则表达式的源字符串匹配的字符串长度可能是变化的。

3.3 “字符实体到编码”替换了什么?

在替换表的设置对话框中,点击浏览按钮可以查看替换表内容,读者也可以阅读src目录的源文件。这张替换表中包含3组替换:

  1. 将编码255以内(含255,下同)的100个命名实体替换到对应的编码文本。
  2. 将编码128-255的128个数字实体替换到对应的编码文本。
  3. 将编码255以内的194个字符替换到对应的编码文本。这194个字符包括这个范围内的全部191个可打印字符以及3个常用的控制符:09、0D、0A。

从替换表的内容可见,“字符实体到编码”可以将编码在255以内的源文本全部替换成对应的编码。

结束语

本文介绍了怎么使用cnbook的自定义替换。 cnbook下载)的设计目标是一个快速、小巧、灵活的文本处理工具。可惜我没有时间完善它。我觉得至少还要加上“列模式”、“列出包含字符串的行”、“输入法感知”,我才可能把它作为默认的文本编辑器。不过,cnbook对四字节汉字的支持还是不错的,功能上也略强于“记事本”。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
textpro6.5版 属于textpro6系列。支持Unicode。支持正则表达式。处理速度极快。是目前流行最好用的文本编辑器(之一)。内附使用说明及正则表达式手册。 主要功能 1. BIG5(BIG5+)码文件与GBK码文件相互转换 TextPro可以将13083个BIG5码和约21500个BIG5+码汉字与GBK码相互转换,转码数量在同类软件中最大。除了一对一的汉字转换外,内部转换时还采取了以词组选择多义字的方法以尽量减少转换错误;随后用户还可在自动转码后采用人工干预的“复选”操作,对最常见的转换错误进行审核。(用户还可自定义某学科的专用字替换表,详见“汉字转换说明”文件。) 由于Windows系统只支持BIG5码,不支持BIG5+码,我们决定从5.0正式版中舍弃GBK转BIG5+。 2. GBK码繁体与简体相互转换 与第1种功能结合,可以实现BIG5(BIG5+)至GBK简体优先的内码转换。 示例如下:(下面BIG5码字符显示为码,可用中文平台显示原来的字。) BIG码字符:竒阶疘簄宫履卅 转为GB码:经论、涅盘、阿僧只劫、金刚萨□(有错漏字) 转为GBK码:經論、涅槃、阿僧祇劫、金剛薩埵(不合国标) 再繁转简:经论、涅槃、阿僧祇劫、金刚萨埵(符合国标) GBK码繁简体转换与BIG5+/GBK转换功能分开执行可以适应一些特殊的需求,也为今后UNICODE的发展趋势做好了准备。 简体转繁体中解决了大部分一对多的难题,但对复杂情形和古文还不适用,只能起到参考作用。详见“汉字转换说明”文件。 3.强化的查找/替换功能(正则表达式和自定义替换) TextPro推出支持双字节的正则表达式和首创的自定义替换,功能十分强大。经过适当的组合,可以完成的功能几乎是无限的。详见“正则表达式和自定义替换说明”。 4.合并文件 Windows环境下合并文件的软件较少。TextPro能实现Windows环境中比较完善的文件合并功能。 TextPro有两种合并文件的操作方法。 一是半自动合并文件:单击“文件|合并文件”,选择文件,排序,填好合并后的文件名,然后单击“合并”; 二是自动合并文件:对有规律的文件名可以使用。例如有文件“001_001.txt”,“001_002.txt”……,“002_001.txt”,“002_002.txt”……,可以单击“文件|自动合并文件”,对其中的源文件输入正则表达式“(\d+)_(\d+)\.txt”,目标文件名为“\1.txt”,排序关键字为“\2”,则所有以001开头的文件合并为001.txt,以002开头的所有文件合并为002.txt。 5.文件比较 能够直观对比两个文件内容异同的软件较罕见。TextPro可以在窗口中打开两个文件,在“窗口”菜单选择“平铺”,分别单击每个文件内容中相同的启始位置,然后连续按键盘上的“F5”按键开始比较。 发现不同字符时,程序在下方状态栏提示不相同的字符及其位置,当前激活的文件中,光标自动移到不相同的字符处,以便直接编辑,另一个未激活文件窗口的显示位置自动随之移动。 比较时自动忽略回车和半角空格,还有“忽略全角标点符号”和“忽略半角符号”的选项。 如果在比较中失去正确的位置对应,请分别在两个文件中重新设定往下比较的起始位置。 6.批处理 除了第5项功能之外,TextPro可以同时对多个文件进行多步骤批处理。支持多层目录操作和文件备份。 TextPro还有许多特点,可在程序的帮助文件中看到,不一一例举了。TextPro是根据实际需求逐渐增加功能而发展起来的。只要灵活组合各种功能,即可实现汉字转换、文本处理和网页编辑的多种要求。 7.文字编辑 具有比Notepad更好的编辑功能,不受文件大小的限制。 ●下载与反馈● TextPro是一个免费软件。下载、解压后的TextPro.exe程序可直接使用,无须安装。 TextPro可以定制字体的显示颜色和换行方式。TextPro还提供一种GBK显示字库,在非简体中文WINDOWS时可以改善字体的美观性。 欢迎大家测试,以便推出更好用的TextPro 版本。若您有什么建议和意见,可发e-mail给我们。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值