Kevin Su bio photo

Kevin Su

patience, persevere, and enjoy

Email Github Stackoverflow

关于字符编码问题,一直想深入了解一下.因为之前在做关于网络数据传输的时候,对传输的数据进行压缩/解压缩,加密/解密的过程中,出现了很多问题.主要是因为对字符编码的知识不了解,后来把程序调通了,就一直闲置着,没有进一步去深入学习下.今天又因为emoji表情,在网上查看资料,看到一篇不错的博文,解决了我一些疑惑.
因为要为数据在网络传输中更加安全以及节省流量.所以需要对数据进行加密,压缩,编码等操作.
其中遇到编码的问题.byte[]数组与String字符串的转换非常频繁,只要一步出错,就会导致失败.

十分钟搞清字符集和字符编码

参考2


看完之前的文章后,通过自己的理解做以下笔记:

名词解析:

字符集: 字符的集合,如ASCII,ISO-8859,GB2312,Unicode….,不同的字符集里面的内容不同,GB2312这个字符集就有中文的,而不需要用到日文的内容,而且就算大家都有最基本的英文,数字的字符,但是排列的顺序也是不同的.计算机要准确的处理各种字符集文字,需要进行字符编码,以便计算机能够识别和存储各种文字.

字符编码: 编码和字符集不同.字符集只是字符的集合,不一定适合作网络传输,处理,有时需要经过编码次啊能应用.如Unicode可依不同需要以UTF-8,UTF-16,UTF-32等方式编码.字符编码就是以二进制的数字来对应字符集的字符.

使用哪些字符.也就是说哪些汉字,字幕和符号会被收入标准中.所包含的”字符”的集合就叫做”字符集”.规定每个”字符”分别用一个字符还是多个字符存储,用哪些字节来存储,这个规定就叫做”编码”“

ASCII字符集与ASCII编码:每个字符占一个字节,用后7为来表示定义一个字符,所以定义了128个字符.

Unicode字符集与Unicode编码:Unicode用数字0~0x10FFFF来映射所有字符(最多1114112个字符).给Unicode字符集编码的还有UTF-8,UTF-7,UTF-16,UnicodeBig等等..

####常用的编码规则

  1. 单字节字符编码
    * 编码标准:ISO-8859-1 * 说明:最简单的编码规则,每一个字节直接作为一个 UNICODE 字符。比如,[0xD6, 0xD0] 这两个字节,通过 iso-8859-1 转化为字符串时,将直接得到 [0x00D6, 0x00D0] 两个 UNICODE 字符,即 “ÖД。反之,将 UNICODE 字符串通过 iso-8859-1 转化为字节串时,只能正常转化 0~255 范围的字符。

  2. ANSI编码 * 编码标准:GB2312, BIG5, Shift_JIS, ISO-8859-2。 * 把 UNICODE 字符串通过 ANSI 编码转化为“字节串”时,根据各自编码的规定,一个 UNICODE 字符可能转化成一个字节或多个字节。 反之,将字节串转化成字符串时,也可能多个字节转化成一个字符。比如,[0xD6, 0xD0] 这两个字节,通过 GB2312 转化为字符串时,将得到 [0x4E2D] 一个字符,即 ‘中’ 字。ANSI 编码”的特点:
    (1)这些“ANSI 编码标准”都只能处理各自语言范围之内的 UNICODE 字符。
    (2)“UNICODE 字符”与“转换出来的字节”之间的关系是人为规定的。

  3. UNICODE编码

    • 编码标准:UTF-8, UTF-16, UnicodeBig。
    • 与“ANSI 编码”类似的,把字符串通过 UNICODE 编码转化成“字节串”时,一个 UNICODE 字符可能转化成一个字节或多个字节。与“ANSI 编码”不同的是:
      (1)这些“UNICODE 编码”能够处理所有的 UNICODE 字符。
      (2)“UNICODE 字符”与“转换出来的字节”之间是可以通过计算得到的。

消息摘要

消息摘要是唯一对应一个消息或者文本的固定长度的值,它悠一个单向Hash加密函数对消息进行作用而产生.如果中途消息发生了改变,那么对应的消息摘要就发生了改变.通过对消息摘要的判断,可以保证消息的完整性.

消息摘要算法的主要特征是加密过程不需要密钥,并且经过加密的数据无法被解密

消息摘要算法:

  1. SHA1
  2. MD5

加密解密算法:加密算法分为对称加密算法和非对称加密算法.

对称加密算法:1.DES 2.3DES 3.AES
非对称加密算法:1.RSA 2.DSA 3.ECC


关于压缩解压缩的方式:

  1. GZIP