编码(计算机编程语言的代码)是信息从一种形式或格式转换为另一种形式的过程。
- 编码(Encoding)在认知上是解释传入的刺激的一种基本知觉的过程。技术上来说,这是一个复杂的、多阶段的转换过程,从较为客观的感觉输入(例如光、声)到主观上有意义的体验。
- 字符编码(Character encoding)是一套法则,使用该法则能够对自然语言的字符的一个集合(如字母表或音节表),与其他东西的一个集合(如号码或电脉冲)进行配对。
- 文字编码(Text encoding)使用一种标记语言来标记一篇文字的结构和其他特征,以方便计算机进行处理。
- 语义编码(Semantics encoding),以正式语言乙对正式语言甲进行语义编码,即是使用语言乙表达语言甲所有的词汇(如程序或说明)的一种方法。
- 电子编码(Electronic encoding)是将一个信号转换成为一个代码,这种代码是被优化过的以利于传输或存储。转换工作通常由一个编解码器完成。
- 神经编码(Neural encoding)是指信息在神经元中被如何描绘的方法。
- 记忆编码(Memory encoding)是把某些主观的体验例如是感觉转换成记忆的过程。
- 加密(Encryption)是为了保密而对信息进行转换的过程。
- 转码(Transcoding)是将已经编码的信息从一种格式转换到另一种格式的过程。
- 解码(Decoding)是编码的相反,亦即把编码过的信息恢复成原来样式。
字符集(字符编码的一个集合)
将一些自然语言中的字符组成一个集合,并对集合中的每个字符制 定规范化的编码方式,这个字符的集合和规范化的编码方式就组成了一个字符集。
如ASCII字符集里面包括了所有的英文字母,并且指定了这些英文字母的编码 规则。
GB2312、BIG5、GBK、GB18030、Unicode等字符集里面包括了常用的简体汉字,并且指定了这些简体汉字的编码规则。
为什么需要编码
编码主要是为了信息加密和信息交换。当数据不利于处理、存储的时候,就需要对它们进行编码。
- 如对字符进行编码是因为自然语言中的字符不利于计算机处理和存储。
- 对图片信息、视频信息、声音信息进行压缩、优化,将其“格式化”,是为了在保证媒体资源质量的同时,尽量的节省网络带宽和本地存储的空间。
- 对URL进行编码,是为了避免URL解析发生歧义,简化解码方式,如:URL采用“&”作为不同参数的分隔符,假如某个特定的参数的名称或者值本身就包括分隔符“&”,如果不将参数中的“&”做编码转换,那势必会增加URL解析的复杂性,提高解析错误的概率。
如何编码和解码
从根本上来讲,编码、解码只是在做翻译工作,将一种形式的数据翻译为另一种形式的数据。
最简单的编码、解码就是相当于从一个Map中根据key查找value,然后使用value代替实际数据中的key的值。
稍微复杂一点儿的编码如javascript中的encodeURIComponent和decodeURIComponent,encodeURIComponent负责将字符串中不符合URL编码规范的字符转换为“%”形式的十六进制Unicode内码序列,decodeURIComponent负责将“%”形式的十六进制Unicode内码序列转换为实际的字符。
URL的编码
URL是采用ASCII字符集进行编码的,所以如果URL中含有非ASCII字符集中的字符,那就需要对其进行编码。
其次,由于URL中好多字符是保留字,他们在URL中具有特殊的含义。如“&”表示参数分隔符,如果想要在URL中使用这些保留字,那就得对他们进行编码。
编码规则:
根据2005年发布的RFC3986“%编码”规范:对URL中属于ASCII字符集的非保留字不做编码;对URL中的保留字需要取其ASCII内码,然后加上“%”前缀将该字符进行替换(编码);对于URL中的非ASCII字符需要取其Unicode内码,然后加上“%”前缀将该字符进行替换(编码)。由于这种编码是采用“%”加上字符内码的方式,所以,有些地方也称其为“百分号编码”。
网友评论