黑马程序员技术交流社区

标题: 编码的区别 [打印本页]

作者: gy345015399    时间: 2016-5-23 19:46
标题: 编码的区别
1.编码理解
                   我们可以把计算机能够理解的语言假定为英语,
                   其它语言要能够在计算机中使用必须经过一次翻译,把它翻译成英语。这个翻译的过程就是编码。2.编码原因
                  1)计算机中存储信息的最小单元是一个字节即 8 个 bit,所以能表示的字符范围是 0~255 个
                2)人类要表示的符号太多,无法用一个字节来完全表示
                3)要解决这个矛盾必须需要一个新的数据结构 char,从 char 到 byte 必须编码
       
3.常见编码
                常见的有 ASCII、ISO-8859-1、GB2312、GBK、UTF-8、UTF-16 等
                并且GB2312、GBK、UTF-8、UTF-16 这几种格式都可以表示一个汉字.
               
        ASCII
                学过计算机的人都知道 ASCII 码,总共有 128 个,用一个字节的低 7 位表示
        ISO-8859-1
                 ISO-8859-1 涵盖了大多数西欧语言字符
        GB2312
                它的全称是《信息交换用汉字编码字符集 基本集》,它是双字节编码,包含 6763 个汉字。
        GBK
                全称叫《汉字内码扩展规范》,是国家技术监督局为 windows95 所制定的新的汉字内码规范,
                它的出现是为了扩展 GB2312,加入更多的汉字, 表示 21003 个汉字,它的编码是和 GB2312 兼容的,
                也就是说用 GB2312 编码的汉字可以用 GBK 来解码,并且不会有乱码。
        UTF-16
                说到 UTF 必须要提到 Unicode(Universal Code 统一码)UTF-16 具体定义了 Unicode 字符在计算机中存取方法。
                UTF-16 用两个字节来表示 Unicode 转化格式,这个是定长的表示方法,不论什么字符都可以用两个字节表示,
                两个字节是 16 个 bit,所以叫 UTF-16。
        UTF-8
                UTF-16 统一采用两个字节表示一个字符,虽然在表示上非常简单方便,但是也有其缺点,
                有很大一部分字符用一个字节就可以表示的现在要两个字节表示,存储空间放大了一倍.
                另外 UTF-16 采用顺序编码,不能对单个字符的编码值进行校验,如果中间的一个字符码值损坏,
                后面的所有码值都将受影响.
                而 UTF-8 这些问题都不存在,UTF-8 对单字节范围内字符仍然用一个字节表示,对汉字采用三个字节表示
               
4.如何选取编码:
                对中文字符后面四种编码格式都能处理,GB2312 与 GBK 编码规则类似,但是 GBK 范围更大,它能处理所有汉字字符,
                所以 GB2312 与 GBK 比较应该选择 GBK。UTF-16 与 UTF-8 都是处理 Unicode 编码,它们的编码规则不太相同,
                相对来说 UTF-16 编码效率最高,字符到字节相互转换更简单,进行字符串操作也更好。它适合在本地磁盘和内存之间使用,
                可以进行字符和字节之间快速切换,如 Java 的内存编码就是采用 UTF-16 编码。但是它不适合在网络之间传输,
                因为网络传输容易损坏字节流,一旦字节流损坏将很难恢复,想比较而言 UTF-8 更适合网络传输,对 ASCII 字符采用单字节存储,
                另外单个字符损坏也不会影响后面其它字符,在编码效率上介于 GBK 和 UTF-16 之间,
                所以 UTF-8 在编码效率上和编码安全性上做了平衡,是理想的中文编码方式。
作者: 68846259    时间: 2016-5-23 21:30
mark........
作者: 一架飞机CE3    时间: 2016-5-23 22:10
马克一下 需取
作者: 来自0419的高兴    时间: 2016-5-23 22:15
get了一个课外知识,谢谢楼主
作者: z736886202    时间: 2016-5-23 22:32
课外拓展知识啊  ..又可以出去装逼了
作者: static小白    时间: 2016-5-23 22:39
赞一下,




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2