各种编码

常见的和编码相关的几个关键词:

  • ASCII
  • Unicode
  • UTF-6,UTF-16,UTF-32
  • GBK
  • ISO 下面开始一个一个的解释:

ASCII码 计算机中所有的信息都是以二进制的形式存在的. 早先美国人发明了计算机,为了用计算机表示他们美国人可以看懂的信息,就将26个英文字母以及一些常用字符用二进制代码表示. 二进制代码和对应的英语字符的关系被规定为ASCII码. ASCII码一共规定了128个字符的编码. 这128个符号(包括32个不能打印出来的控制符号),只占用了一个字节的后面7位,最前面的统一规定为0. 计算机每次读一个字节,解码出具体字符在屏幕上显示出来. ISO编码 欧洲人发现ASCII编码只能表示英语字符,法语\德语中还有很多符号是ASCII编码所不能表示的. 因此欧洲人自己又炮制出来一套编码ISO. ISO编码把ASCII码中字节的最高位也用掉了. 跟ASCII编码一样,计算机每次也只读一个字节,解码具体字符. GBK编码 跟美国人和欧洲人一样,中国人也想用计算机表示我们中国人自己的文字信息. 于是GBK编码油然而生. 由于汉字的数量比较大,一个字节8位是表示不够用的,所以计算机在处理GBK编码的时候分两步: 1.第一位是0,按照ASCII编码来读入一个字节 2.第一位是1,读入两个字节

当然还有日本的shift _JIS编码,韩国的Euc-kr编码.各国有各国字节的编码方式.这样的话,就会出现问题: 如果一篇文章中有好几个国家的语言显示.这篇文章就会乱码,无法阅读. 为了解决这个问题,Unicode编码诞生了.

Unicode编码 Unicode的诞生类似于"秦灭六国,统一货币".当然,Unicode并没有把其他编码给消灭掉,但它几乎收纳了世界上大部分的字符. 这些字符都有唯一的编码,这就解决了多国语言同一页面显示乱码的问题. Unicode编码的编号从0到100多万(3个字节),每一个区间对应一种语言的编码.

Unicode编码虽然解决了乱码的问题,但同时又带来一个新的问题:空间浪费. 比如英语字母明明可以用一个字节来表示,Unicode中却要用3个字节,这是对空间的严重浪费. 为了解决空间浪费的问题,UTF编码就诞生了.

UTF-8,UTF-16-UTF-32 UTF仅仅是编码的解决方案,并不是一种新的编码方式. Unicode只是一个符号集,它规定了符号的二进制代码,但是没有规定这些二进制代码应该如何存储. 所以UTF-8仅仅是Unicode编码的一种具体实现形式. UTF-8采用变长的编码方式,可以用1~4个字节表示一个符号,根据不同的符号而变化字节长度. 所以,UTF-8是节省空间的. 在英文字符比较多的内容中,采用UTF-8编码比较节省空间, 在中文字符比较多的内容中,采用UTF-16比较节省空间,因为汉字至少需要两个字节来表示.

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏xingoo, 一个梦想做发明家的程序员

《JavaScript语言精粹》—— 读书总结

话说这本书还是同学的推荐才读的,之前感觉这本书太薄了,不值得看,没想到小身材有大智慧,书中的内容总结的还是很到位的!所以就把最后几章,精华的部分整理整理。 优...

2689
来自专栏java一日一条

java中i=i++问题分析

程序的执行顺序是这样的:因为++在后面,所以先使用i,“使用”的含义就是i++这个表达式的值是0,但是并没有做赋值操作,它在整个语句的最后才做赋值,也就是说在做...

573
来自专栏magicsoar

关于字符编码的那些事

一、编码是什么 编码为了某种目的把信息从一种形式集合转换为另一种形式集合的过程,古时的鸣金收兵,从某种意义上讲也是一种编码,将帅发出了退兵的命令,为了让更多的人...

1946
来自专栏C/C++基础

C++智能指针

C++中,动态内存的管理是通过一对运算符来完成的,new用于申请内存空间,调用对象构造函数初始化对象并返回指向该对象的指针。delete接收一个动态对象的指针,...

2181
来自专栏分布式系统和大数据处理

四种简单的排序算法

我觉得如果想成为一名优秀的开发者,不仅要积极学习时下流行的新技术,比如WCF、Asp.Net MVC、AJAX等,熟练应用一些已经比较成熟的技术,比如Asp.N...

1282
来自专栏PPV课数据科学社区

【学习】数据分析师的Python日记-第1天:谁来给我讲讲Python?

今天带来的是PYTHON,这是一篇非常有意思的文章。希望对大家有帮助。 ---- ---- 导语:或许是网上嘈嘈杂杂的关于大数据、互联网的新形势争论,或许是招聘...

2079
来自专栏java一日一条

java中i=i++问题分析

程序的执行顺序是这样的:因为++在后面,所以先使用i,“使用”的含义就是i++这个表达式的值是0,但是并没有做赋值操作,它在整个语句的最后才做赋值,也就是说在做...

681
来自专栏Java帮帮-微信公众号-技术文章全总结

【Java提高十二】hashCode()equals()

hashCode的作用 要想了解一个方法的内在原理,我们首先需要明白它是干什么的,也就是这个方法的作用。在讲解数组时,我们提到数组是java中效率最高的数据结...

2704
来自专栏用户2442861的专栏

sizeof小览

http://blog.csdn.net/scythe666/article/details/47012347

751
来自专栏逸鹏说道

Python3 与 C# 基础语法对比(String专栏)

Python3 与 C# 基础语法对比:https://www.cnblogs.com/dotnetcrazy/p/9102030.html

1022

扫码关注云+社区

领取腾讯云代金券