编码解码模型和实现

一、字符编码和字节解码的基本概念[1]
机器存储数据只有01数据形式,读取数据的时候,只有借助编码方案的映射,才能转换为人类可读的数据形式;保存数据的时候,也同样需要借助于编码方案,将其转换成01数据形式
常见的编码方案有ASCII,Latin,GBK,UTF8
读取过程:01数据——》编码方案映射转换——》人类可读的数据形式
保存过程:人类可读的数据形式——》编码方案映射转换——》01数据
01数据以字节为单位进行展示,那么可得到字节流;人类可读的数据以字符为单位进行展示,那么可得到字符流。二者之间的关系如图1所示

                                                    图1



二、编码和解码模型

编码和解码的整体模型如图2所示:

                                                                                                               图2

编码解码模型和实现_第1张图片

在编码过程中,如果在选定的编码方案中不能找到与待编码字符相应的映射记录,那么有两种解决方案:一、直接报错,停止编码;二、直接编码成某个特殊的字节序列,使用该种解决方案后,就不能从得到的字节流解码得到原始的字符流,即存在信息丢失。
同理,在解码过程中,如果在选定的编码方案中不能找到与待解码字节序列相应的映射记录,那么有两种解决方案:一、直接报错,停止解码;二、直接解码成选定的编码方案中的某个特殊字符,这其中就存在着信息丢失。

三、实现
围绕图2所示的编码和解码模型,不同软件和程序都有各自的实现。
比如对于Intellij Idea中的文本编辑器来说,它对编码和解码模型的实现有如下特点:
1)在编码过程中,如果存在在选定编码方案中找不到映射记录的待编码字符,那么直接编码成某个特殊的字节序列。比如说选定编码方案为GBK,存在在GBK编码方案中找不到映射记录的待编码字符,那么直接编码成"0x3f"这个特殊的字节序列

2)在解码过程中,如果存在在选定编码方案中找不到映射记录的待解码字节序列,那么直接解码成某个特殊字符。比如选定编码方案为UTF-8,存在在UTF-8编码方案中找不到映射记录的待解码字节序列,那么直接解码成"�"这个特殊字符

又比如对于gedit文本编辑器来说,它对编码和解码模型的实现有如下特点:
1)在编码过程中,如果存在在选定编码方案中找不到映射记录的待编码字符,那么直接报错,停止编码

2)在解码过程中,如果存在在选定编码方案中找不到映射记录的待解码字节序列,那么直接报错,停止解码


参考文献:

[1]http://blog.csdn.net/dslztx/article/details/46399769

你可能感兴趣的:(编码解码模型和实现)