1.为什么需要编码?

  由于计算机只能处理0和1(即两种状态:高低电平),所有我们需要将英文字母,数字,特殊符号翻译成计算机认识的0和1,那如何去翻译以及用何种规则去翻译呢,于是聪明的人们发明了一系列编码规则,即字符和数字的对应。最先被发明的是ASCII编码,后来则衍生出了Unicode编码和UTF-8编码。

2.编码格式的演变

  世界第一台计算机诞生于美国宾西法尼亚大学,所以最早使用计算机的是美国人,最早的信息交换代码也诞生于美国,即ASCII(America Standard Code for Infomation Interchange,美国信息交换标准代码)。ASCII码实质就是数字和字符的对应关系,比如大写字母"A"所对应的十进制数字为65(为了更易理解我们以十进制举例,八进制,十六进制同理),而十进制数字65在计算机中表示为01000001,计算机不能存储字符,但是能存储0和1,所以字母“A”在计算机中实际存储为01000001,占8位,即1个字节。其他字符也是同样的道理,各自对应一个十进制数字,可参考ASCII码标准对照表。是不是很简单,但是为何人们还制定Unicode编码呢?由于ASCII编码是美国标准,所涵盖的字符也只仅仅包含了A-Z,a-z,数字0-9,以及其他的控制字符和一些特殊字符,一共包含127个字符,后来由于计算机普及,这127个符号已经不能满足人们的需求,于是IBM利用128~255位对ASCII码进行了补充,包含了附加符号符号,希腊字母以及制图符号等,这一部分编码则称为扩展ASCII码。
  世界上有上百种语言,很显然,标准ASCII码和扩展ASCII码仍然不能满足不同国家对于编码的需求,比如汉字的“汉”就不能用ASCII码表示,如果在编辑器设置了ASCII编码,在遇到汉字的情景下则会出现乱码,于是中国制定了GB2312编码,日本制定了Shift_JIS编码,但是同一款应用,不同地区的人使用,就需要包含不同的编码集合,显然这样做是不明智的,于是Unicode应运而生。Unicode编码通常用2个字节表示,有些偏僻的字符会用到2-4个字节,从而实现一套编码保存所有字符,这样不同国家,不同地区就形成了一套统一的编码格式。
  还是拿字符“A”举栗子,“A”对应的ASCII码为01000001,如果将“A”用Unicode编码表示就在前面补0就可以了,0000000001000001,现在我们也可以用Unicode编码来表示“汉”了,0110110001001001。不难发现,如果用Unicode去编码所有的字符,乱码的问题也就迎刃而解,但是问题也来了,如果一段文字中,既有英文字母,又有汉字,英文字母同样也会用2个字节(16位)来进行表示,这显然会造成存储空间的浪费。那么有没有一种更加通用并且更加节省存储空间的编码呢?当然是有的,聪明的人们发明出了UTF-8编码,UTF-8是一种可变长的编码,为啥叫UTF-8呢,这个8是什么意思呢?8代表一个字节,即8位,但不代表UTF-8用一个字节表示一个字符,而是在UTF-8编码格式下,一个字符所占字节大小变化的最小单位,有点绕,说人话就是由于UTF-8编码下,不同字符占用空间的大小是可变的,每个字符可能是1个字节,也可能是2个或者3个字节。   

----- 待更新

深入理解ASCII,Unicode和UTF-8编码相关推荐

  1. ASCII Unicode GBK UTF的联系

    快下班时,爱问问题的小朋友Nico又问了一个问题: "sqlserver里面有char和nchar,那个n据说是指unicode的数据,这个是什么意思." 并不是所有简单的问题都很 ...

  2. ASCII 、GB2312、GBK、GB18030、unicode、UTF-8字符集编码详解

    ASCII码表在线查询: http://www.weste.net/tools/ASCII.asp ASCII字符集编码 ASCII码是7位编码,字符在计算机中以其ASCII码方式表示,其长度为1个字 ...

  3. ASCII 、GB2312、GBK、GB18030、unicode、UTF-8字符集编码详解(转载)

    ASCII字符集编码 ASCII码是7位编码,字符在计算机中以其ASCII码方式表示,其长度为1个字节, 有符号字符型数.编码范围是0x00-0x7F(0~127).ASCII字符集包括英文字母.阿拉 ...

  4. ASCII 、GB2312、GBK、GB18030、unicode、UTF-8字符集编码

    ASCII字符集编码 ASCII字符集编码ASCII码是7位编码,编码范围是0x00-0x7F.ASCII字符集包括英文字母.阿拉伯数字和标点符号等字符.其中0x00-0x20和0x7F共33个控制字 ...

  5. 大端小端,ascii,unicode,utf8,utf16,utf32,gb2312,gbk,gb18030等字符编码问题

    字符编码的问题让我困惑了好久的一段时间,其实简单的想,字符编码没有什么东西的,可是想真弄明白还是花去了我一点时间,前端时间写了一个简单的log程序,主要的工作就是支持系统运行时输出日志信息,同时允许定 ...

  6. ASCII 、GB2312、GBK、GB18030、unicode、UTF-8字符集编码详解 1

    ASCII字符集编码     ASCII码是7位编码,编码范围是0x00-0x7F.ASCII字符集包括英文字母.阿拉伯数字和标点符号等字符.其中0x00-0x20和0x7F共33个控制字符.     ...

  7. ASCII,unicode, utf8 ,big5 ,gb2312,gbk,gb18030等几种常用编码区别

    ASCII,unicode, utf8 ,big5 ,gb2312,gbk,gb18030等几种常用编码区别 最近老为编码问题而烦燥,下定决心一定要将其弄明白!本文主要总 结网上一些朋友提供的 asc ...

  8. 关于字符编码,你所需要知道的(ASCII,Unicode,Utf-8,GB2312…)

    字符编码的问题看似很小,经常被技术人员忽视,但是很容易导致一些莫名其妙的问题.这里总结了一下字符编码的一些普及性的知识,希望对大家有所帮助. 还是得从ASCII码说起 说到字符编码,不得不说ASCII ...

  9. java utf-8字符表_Java中的ASCII、Unicode和UTF-8字符编码集

    首先讲一下几种字符的编码方式: 1. ASCII码 我们知道,在计算机内部,所有的信息最终都表示为一个二进制的字符串.每一个二进制位(bit)有0和1两种状态,因此八个二进制位就可以组合出256种状态 ...

最新文章

  1. 云计算如何对传统软件交付方式产生影响
  2. 【PAT乙级】1042 字符统计 (20 分)
  3. 数据结构:用栈实现表达式的转换(文字描述+详细步骤示例)——中缀转后缀
  4. 开源ETL软件在智能化集成系统中的应用
  5. 如何使用JSON和Servlet创建JQuery DataTable
  6. Python GUI界面编程初步 04 - Tkinter设计框架和概念
  7. (138)FPGA面试题-Verilog HDL中function和task的区别(二)
  8. 面试不慌,看完保证让你写HashMap跟玩一样
  9. 【迁移学习】算法之TrAdaBoost
  10. docker 搭建nginx php mysql_docker搭建nginx+mysql+php
  11. scintilla 中的代码折叠功能的使用
  12. java 两个 多个 版本 同时使用 共存 java8 和 java11
  13. 笔记本电脑光驱位加固态硬盘,重装系统,UEFI启动,解决电脑开机慢的问题
  14. USACO 2007 Dec Silver Mud Puddles bfs or A-star
  15. java 异常国际化_基于springboot实现http响应异常信息国际化
  16. Ubuntu U盘权限只读的解决方案
  17. java version 1.8下载_JDK1.8下载、安装和环境配置教程
  18. 星际无限 | 2021年IPFS应该关注的重点是什么?
  19. OpenStack 环境配置
  20. Houdini 自定义节点参数面板 hou.ParmTemplate学习笔记

热门文章

  1. [NOIP2014] 解方程
  2. 2.2.5 NIO.2 Path 和 Java 已有的 File 类
  3. ubuntu 16.04 中配置Eclipse c++开发环境
  4. 感謝有PPStream這種好東西
  5. Java 集合系列(三)Collection 接口
  6. appium+python自动化40-adb offline(5037端口被占)
  7. 磁盘阵列介绍、进程的查看管理、日志文件的查看分析,systemctl的控制
  8. EndNote(二)之英文引文导入方式
  9. Linux下防御/减轻DDOS***的方法
  10. linux共享文件丢失,【干货分享】linux平台下数据文件被误删后,如何及时得知并进行恢复...