java-编码解密

来源:互联网 发布:国内 阿里云 aws 优势 编辑:程序博客网 时间:2024/05/15 23:50
  • ASCII
    ASCII是American Standard code for Information Interchange,美国信息交换标准代码。
    7位来表示一个字符,共计可以表示128种字符,对于英文这种语言时可以胜任的。随时计算机广泛的使用,ASCII无法完全表示所有的字符,随之ISO-8859-1字符集就应运而生

  • ISO-8859-1
    8位表示一个字符,即一个字节(byte)(8 bit)来表示一个字符,共可以表示256个字符。ISO-8859-1完全兼容ASCII编码集。然后随后发展过程中,类似中文这种语言的广泛性,ISO-8859-1是无法满足

  • gb2312
    国标字符集,对所有的汉字重新进行编码,每一个汉字都有一个对应的表示,2个字节表示一个汉字,基本上可以胜任中文

  • gbk
    对gb2312的一种扩展,例如生僻字等的表示,完全兼容gb2312

  • gb18030
    基于上述的另一个延生,基本上能够对中文简体有很好的支持

  • big5
    繁体中文的一种编码方式。

  • unicode
    由此对于所有国家都需要有对应的编码集,显然是不合理的。因此统一产生了unicode这种编码方式,采用两个字节来表示一个字符。能够有256x256种。采用了unicode之后,存储的容量会大大增加。对于西方英文是大材小用,因此这种编码方式并不适合存储。

  • utf
    unicode Translation Format
    unicode是一个编码方式,而utf是一种存储方式。utf-8/utf-16等是Unicode的实现方式之一。
    对于utf-16来说有两种方式,utf-16le(little endian),utf-16be(big endian),对于一些系统的文件,开头会有一个隐藏不可见的字符来表示这两种形式,称为Zero Width No-Break Space,如果后面跟着0xFEFF(BE,FF大于FE1),反之如果是0XFFFE(LE)。utf-16也是两个字节来表示一个字符,也存在浪费。
    utf-8变长字节表示形式。对于不同的字符有不同的字节来表示,例如中文是通过3个字节来表示。针对utf-8会有一个BOM(Byte Order Mark),这个头是windows系统兼容性问题产生的,在windows下将utf-8的文件转化成16进制可以看到上述Zero Width No-Break Space标识。

对于一个文件,进行一种其他编码格式的解码(前提是支持这种字符表示),然后用这种编码格式编码然后写回原原件格式是可以做到不乱码的,尽管中间的过程是乱码的,但是结果可以表现出正常。

原创粉丝点击