编码杂谈之ASCII与Unicode的前世今生

世界上最早的发表的标准编码系统就是美国在1967年发表的ASCII编码(American Standard Code for Information Interchange美国信息交换标准代码)下图就是ASCII字符代码表(来自百度百科)

ASCII编码的设计是基于拉丁字母的,一共只有128个字符,这对于其他其他国家来说是远远不够的。于是,基于ASCII拓展的ANSI编码应运而生。

ANSI编码全称是American National Standards Institute(美国国家标准学会),在ANSI编码中, 0x00~0x7f 范围的1 个字节来表示 1 个英文字符,也就是128个ASCII编码字符,从0x80~0xFFFF则由各个国家自己决定。像中国,就用两个字节来存储一个汉字。因为后177578字节由各个国家自己定义,不同的国家地区有着不同的标准,因此,就产生不一样的编码标准。

例如:由中国制订的ANSI编码标准就是GBK编码、GB2312编码等等,由日本制订的就是Shift_JIS 编码。

随着互联网的发展,各个国家之间交流的增加,不同编码标准导致的问题开始暴露出来,ANSI编码有着一定的局限性,国家之间的ANSI编码并不兼容。比如说,在日本国家写的一个txt文本以ANSI编码格式保存(也就是Shift_JIS编码),发送到中国之后,同样以ANSI编码格式打开(中国以GBK编码打开),因为标准的不一样,所以并不会展示正常的日文,而是变成乱码。

发现这个问题之后,人们了解到,各国通用的标准编码是很有必要的,所以Unicode 编码系统诞生了。

Unicode共有17组,从0x0000到0x10FFFF的17个平面中,每个平面有2¹⁶=65536个码位,我们目前世界上绝大部分的文字都存放在第0个平面中(基本多文种平面Basic Multilingual Plane,BMP),第1个平面放的是多文种补充平面,第2平面则是表意文字补充平面,目前只用了这小数的几个平面(看维基百科),后面的那些平面基本上还没用上。而我们的汉字就属于中日韩统一表意文字(CJK Unified Ideographs)。

而Unicode只是一张标准的编码表,代表着这个符号统一用这个编码表示,但是并不一定需要你用这个编码保存在计算机中。因为Unicode编码中一个字符两个字节(16位),对于使用拉丁文、英文等国家而言是十分浪费空间的,于是就有了不同的对Unicode的实现方式,这种实现方式就称为Unicode转换格式(Unicode Transformation Format,UTF)。常见的转换格式有UTF-8,UTF-16,UTF-32.其中最常用的就是UTF-8了,因为它是一种可变长度字符编码。它基于原来的ASCII,像拉丁文一个字符就用一个字节保存,但是汉字则是用三个字节保存。

而为了方便我们在程序中操作,一般在内存中展示位Unicode编码,而保存成文件时则会自动转成UTF-8保存。

所以大家在保存文件的时候就会发现,同样是保存一份中文的文本,保存ANSI编码格式与保存UTF-8格式,占用的存储空间是完全不一样的

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值