`
ihuashao
  • 浏览: 4582686 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

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对四字节汉字的支持还是不错的,功能上也略强于“记事本”。

分享到:
评论

相关推荐

    cnbook中文记事本

    cnbook中文记事本

    LINUX操作系统(电子教案,参考答案)

    Linux的树型结构,Linux的文本编辑,Linux的安装和启动,用户管理,Shell编程技术,进程管理,C编译器,系统扩充,维护与监视,Linux的图形界面,网络的基本概念与设置,Linux在网络资源共享和电子邮件方面的应用,...

    中文词库素材

    用于文档编辑,里面包含很多有用的功能,欢迎大家下载!

    96_基于Android的美食推荐 APP-源码.zip

    提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

    南京大学分布式系统课程实验.zip

    南京大学分布式系统课程实验.zip

    mysql开发教程&案例&相关项目概要介绍.docx

    MySQL作为一款广泛使用的开源关系型数据库管理系统,在软件开发中扮演着核心角色。以下是对MySQL开发教程、案例及相关项目概要的综合介绍: ### MySQL开发教程概览 **黑马程序员MySQL全套教程** - **目标群体**:适合零基础至进阶水平的学习者,特别是希望从事IT行业并期望通过MySQL技能提高薪资的学员。 - **课程内容**: - **学前须知**:要求学员具备Python基础知识及网络多线程知识。 - **开发工具**:使用Navicat(MySQL的图形化界面客户端)及MySQL自身的客户端与服务端(推荐版本5.0左右)。 - **课程重点**:涵盖MySQL的图形界面操作、终端CRUD操作,以及通过Python与MySQL交互实现黑马订单管理系统的开发,包括查询、增加、删除、修改订单等功能。 - **课程目标**: - 理解数据库分类、MySQL的应用场景。 - 安装并使用Navicat进行数据操作。 - 安装MySQL并进行终端的数据库操作。 - Python与MySQL的交互编程。 - 完成黑马订单管理系统的实战项目。

    儿童节 python庆祝代码简要介绍-20240601.docx

    为了庆祝儿童节,我们可以用Python编写一个简单而有趣的程序,比如一个猜数字的小游戏,这非常适合孩子们玩耍。游戏规则很简单:计算机随机生成一个1到50之间的数字,玩家尝试猜测这个数字,计算机会根据玩家的输入给出提示(太高、太低或猜对了),直到猜中为止。下面是一个实现这个小游戏的Python代码示例: ```python import random print("我想了一个1到50之间的数字,你能猜到是多少吗?") # 生成一个1到50之间的随机数作为答案 secret_number = random.randint(1, 50) guesses_taken = 0 # 开始猜测循环 while True: try: # 获取玩家的输入并确保它是一个有效的整数 guess = int(input("请输入你的猜测:")) guesses_taken += 1 if guess < secret_number: print

    MySQLTuner,一个用Perl编写的脚本,它允许你快速审查MySQL安装情况,并进行调整以提高性能和稳定性

    MySQLTuner是一个用Perl编写的脚本,它允许你快速审查MySQL安装情况,并进行调整以提高性能和稳定性。它会检索当前的配置变量和状态数据,并以简洁的格式呈现,同时提供一些基本的性能建议。

    JAVA+SQL办公自动化系统(源代码+论文+外文翻译)

    JAVA+SQL办公自动化系统(源代码+论文+外文翻译)

    VBA-N级弹出下拉菜单【选择一次输出结果】.xlsm

    VBA-N级弹出下拉菜单【选择一次输出结果】.xlsm 直接选择一级菜单后弹出下一级菜单,一直到最后一级,一次输出结果

    Berkeley CS61B Data Structures 数据结构 课程实验和项目.zip

    Berkeley CS61B Data Structures 数据结构 课程实验和项目.zip

    基于 VC++实现的完整串口通信程序,TCPIP协议 UDP协议 短连接,长连接,定时器 等

    【作品名称】:基于 VC++实现的完整串口通信程序,TCPIP协议 UDP协议 短连接,长连接,定时器 等 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【项目介绍】:基于 VC++实现的完整串口通信程序,TCPIP协议 UDP协议 短连接,长连接,定时器 等

    五洲商城小程序前端源码/小程序模板

    五洲商城小程序前端源码/小程序模板。

    PPT模板-通用模板-多场景应用-精品PPT通用模板:适用于演讲情感故事分享、商业提案教育培训、品牌推广、激励演讲、艺术创意展示

    本资源提供了一套精品PPT通用模板,设计优雅且功能全面,适合各种演讲和展示场景,包括但不限于商业提案、教育培训、个人品牌推广、激励演讲以及艺术和创意展示。这套模板的多功能性使其成为商务人士、教育者、艺术家及所有需要高质量演示材料的用户的理想选择。 模板特点: 多场景适用性:无论是商业环境下的提案、教室内的教育演讲,还是个人情感故事的分享,此模板均能提供合适的布局和设计。 设计元素:包括精心设计的幻灯片背景、图表、图形和文本框等元素,所有设计均旨在提升信息传达的清晰度和视觉吸引力。 易于定制:模板设计考虑到用户可能需要进行个性化调整,因此提供了高度可定制的布局和样式选项,使用户能够根据自己的需要轻松修改。 高质量视觉效果:采用现代设计理念,结合精美的色彩搭配和高分辨率图片,确保每一次演示都能给观众留下深刻印象。 使用场景详解: 商业提案:模板提供专业的商业图表和数据展示方案,帮助阐述复杂的商业逻辑和数据。 情感故事分享:通过情感化的背景设计和图片展示功能,让个人故事表达更加生动感人。 教育和培训:模板中的教育专用幻灯片设计,适合用于课堂教学和在线培训课程。 个人品牌推广:

    基于人工智能模型U-net神经网络医学图像分割

    这个完整工程给出基于人工智能模型U-net神经网络医学图像分割功能实现,适合基于机器学习和深度学习模型分析的学习资料,并有详细程序说明书。

    基于微信小程序的人脸识别的签到系统的设计与实现源码.zip

    提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

    QT数据库大作业-登录页面

    QT数据库大作业-登录页面

    知识领域: 网络编程 技术关键词: socket、网络编程、异步IO、TCP/IP 内容关键词: 客户端、服务器、网络协议

    知识领域: 网络编程 技术关键词: socket、网络编程、异步IO、TCP/IP 内容关键词: 客户端、服务器、网络协议 用途: 学习使用Python构建网络应用和通信系统 资源描述: Python官方文档中提供了全面的网络编程指南和示例,涵盖了socket编程、异步IO和网络协议等方面的内容。

    com.xunmeng.pinduoduo_Release_cd290ca9_ARM64.apk

    com.xunmeng.pinduoduo_Release_cd290ca9_ARM64.apk

    115_基于Android的智慧园区管理系统的设计与实现-源码.zip

    提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

Global site tag (gtag.js) - Google Analytics