各种编码方式及其来历

ASCII(American Standard Code for Information Interchange,美国信息交换标准代码)。

最早出现的编码方式,以7bit来表示一个字符,共计表示128种字符(2的7次方)。

美国作为发明计算机的国家,当初设计的的编码方式完全是为自己国家服务,对付英文/数字/标点完全没问题。


ISO-8859-1

以8bit来表示一个字符(即1个字节byte表示一个字符),共计表示256种字符(2的8次方)。完全兼容ASCII,即ASCII显示的字符,ISO-8859-1也完全能显示

随着计算机的发展,ASCII已经不满足非英语的西方国家(如德国、法国),所以出现了ISO-8859-1编码方式


gb2312

以2个字节(16bit)表示一个字符

gb->国标。随着计算机引入到中国,计算机的编码方式不能显示中文,于是中国自己创造了一个编码方式,用于显示中文


gbk(国标扩展)

以2个字节(16bit)表示一个字符

由于gb2312设计的时候,不能表示一些生僻字,为了展示这些生僻字,gbk就应运而生了


gb18030

以4个字节(32bit)表示一个字符

gbk用到后面发现,还是不能表示所有的中文,就增加了这种新的编码方式。目前是最完整的汉字表示形式(简体中文)


big5

以2个字节(16bit)表示一个字符

繁体中文的表示形式,台湾等地区使用较多,跟gb系列没有任何关系


由于各个国家都有自己的编码方式,国际标准组织就出了一个规范,统一所有国家的编码,这个编码方式就是unicode(\uxxxx)

unicode规定了字符集之后,由不同的实现方式,衍生出不同的编码方式

目前Unicode的占用字节数是1到6个字节



UTF-16

统一采用2个字节(16bit)表示一个字符

这是Unicode的第一个版本,能表示65536个字符,

UTF-16的存储形式,跟Unicode定义的字符集是一样的

举个例子:

“汉”这个字,在Unicode的编码是 01101100   01001001

则在UTF-16中,这个字在硬盘中存储的形式就是 01101100   01001001

说到UTF-16,就不得不说说UTF-16中蛋疼的LE(little endian)和BE(big endian)了,

还是这个例子,“汉”这个字的编码,

如果是LE的形式存储,就是:01001001 01101100 ,刚好把2个字节反过来了(据说这是为了迎合cpu的读取速度,cpu就是倒着吃数据的)

如果是BE的形式存储,就是:01101100  01001001

怎样区分一个文件是以LE形式存储还是以BE形式存储呢?简单,一般UTF-16格式存储的文件里,文件开头有个俗称为“Zero Width No-Break Space”的东西(其实就是一个字符,并且该字符无法看见),如果该字符为 0xFFFE,该文件就是LE形式的,如果为0xFEFF,则为BE形式的


UTF-8(Unicode Translation Format)

采用1到6个字节表示一个字符(编码Unicode字符)

UTF-16出现以后,已经解决编码不统一的问题了,然而,对于英美国家来说,UTF-16就显得太笨重了,因为我就是需要1个字节就能表示的,你偏要我用2个字节表示,这对存储空间就造成了很大的浪费(相当于一个文件的大小翻倍了),好了,我们现在最常用的编码方式终于闪亮登场——UTF-8。

UTF-8存储Unicode的方式比较复杂,程序把一个字节一个字节的来读取,然后再根据字节中开头的bit标志来识别是该把1个还是2个或3个字节做为一个单元来处理.

0xxxxxxx,如果是这样的01串,也就是以0开头后面是啥就不用管了XX代表任意bit.就表示把一个字节做为一个单元.就跟ASCII完全一样.
110xxxxx 10xxxxxx.如果是这样的格式,则把两个字节当一个单元
1110xxxx 10xxxxxx 10xxxxxx 如果是这种格式则是三个字节当一个单元

确定了一个字符用多少个字节以后,直接把该字符的Unicode编码逐个替换进UTF-8的格式里去就行了

综合起来,一个字节的字符有128个(7个X,2的7次方),两个字节的字符有2048个(11个X,2的11次方),3个字节的字符有131072个(17个X,2的17次方),以此类推

有点抽象,还是上面那个例子,“汉”这个字,在Unicode的编码是 01101100   01001001,用十进制表示就是27721,27721>2048并且27721<131072,所以,该字使用3字节长度的UTF-8,UTF-8编码之后,存储形式为:

11100110 10110001 10001001

所以,UTF-8用一个字节表示英文字母或者数字,完全兼容于ASCII。一般用3个字节表示一个中文


UTF-32

统一采用4个字节(32bit)表示一个字符

这是Unicode的第二个版本,因为发现2个字节已经满足不了字符的展示了。其他说明跟UTF-16类似,与UTF-8的关系也跟UTF-16类似



参考文章:http://www.cnblogs.com/kingcat/archive/2012/10/16/2726334.html

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 适合毕业设计、课程设计作业。这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。 所有源码均经过严格测试,可以直接运行,可以放心下载使用。有任何使用问题欢迎随时与博主沟通,第一时间进行解答!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值