本文共 1096 字,大约阅读时间需要 3 分钟。
- 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 基于上述的另一个延生,基本上能够对中文简体有很好的支持
- 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标识。
对于一个文件,进行一种其他编码格式的解码(前提是支持这种字符表示),然后用这种编码格式编码然后写回原原件格式是可以做到不乱码的,尽管中间的过程是乱码的,但是结果可以表现出正常。
转载地址:http://cqrgi.baihongyu.com/