字符编码的发展历史

Unicode和UTF-8有何区别?

在这个问题下的于洋的最高票回答中,比较完整地介绍了字符编码的发展历史,为了便于记忆,再次简要概括一番。

一个字节:最初一个字节的标准是混乱的,出现过4位、6位、7位的一字节标准,最终由于历史原因和物理存储需求(8位是2的3次方,方便物理存储),所以采用了8位为一个字节的标准。

ASCII:定下了8位为一个字节后,那么一个字节可以表示的状态就有256种(2^8),对应0-255号。接下来就需要考虑8位如何表示一个字符了,ASCII码顾名思义(American Standard Code for Information Interchange)就是美国的信息交换标准码,因此只需要表示出英文字母和少数的标点符号以及操作控制符号即可,于是人们把这些需要编码的字符编到了0-127号(包括127),这种编码方式就是ASCII码。后来为了满足更多地区的字符编码的需求,127号之后的位置也被编码了字符,包含了127号之后的ASCII码被称为扩展ASCII码

GB2312等: 但是一个字节最多只能编码256个字符,对于世界上的语言字符来说远远不够,比如中文的汉字就有许许多多,因此中国采用了GB2312GBKGB18030等双字节字符集(DBCS)的编码方案,还有各个地区和语言采用了各自的编码方案,编码方案不统一的问题就造成了很大的困扰。

Unicode:面对这种困扰的局面,国际标准化组织(ISO)决定来解决这个问题,他们做了一个包含了地球上所有文化、字母、符号的编码方案Unicode,并且统一采用双字节,对于原来的单字节的符号,低位编码不变,扩展其高位为0变为双字节符号,这样就解决了标准与统一的问题。

但是Unicode也有一些问题,一是计算机如何区分编码为Unicode字符还是两个ASCII字符,二是半角符号(就是原来的ASCII方案里的一字节字符)只占用了一个字节的空间,Unicode占用了双倍的空间,对于英文字母等半角字符来说,直接多占用了一倍的空间,这是极大的浪费。因此,Unicode在很长的一段时间内难以推广。

UTF:直到后来UTF(UCS Transfer Format)标准的出现,Unicode才得到更好的使用。UTF是一种字符在网络上的传输方案,专为数据传输而设计,UTF-16就是一次传输16位的数据,UTF-8就是一次传输8位的数据。其中UTF-8是使用最广的一种Unicode的实现方式,它的一大特点就是它是一种变长度的编码方式,当字符在ASCII码范围内是,使用一个字节代表一个字符,字符在别的范围内时,又是另外的长度,比如中文使用三个字节的长度。UTF-8通过一些算法和规则来实现Unicode的转换。

而在javascript中,\u表示使用Unicode编码,比如\u0078表示字符x,\x表示使用16进制的ASCII码,比如\x78也表示x,\[0-7][0-7][0-7]表示使用8进制的ASCII吗,比如\170表示x。

总结:

编码方案最初为ASCII码,且只用了0-127号,后来由于需要使用更多字符的原因,发展为扩展ASCII码,之后由于各个地区和语言的不同,出现了许多编码标准,比如中国的GB2312等。面临这种局面,ISO制定了Unicode来实现编码的统一,由于Unicode的一些缺点,没有得到更大的推广。直到UTF,尤其是UTF-8这些传输方案的出现,Unicode得到了大范围的使用。

另外在Javascript中,\u表示使用Unicode编码,[0-7][0-7][0-7]表示使用8进制的ASCII码,\x表示使用16进制的ASCII码。

ASCII, Unicode, UTF-8, 8进制, 16进制等各种编码学习理解笔记的更多相关文章

  1. C++ 10进制, 16进制, ASCII码, 单字节与多字节的相互转换

    这些简单的转换是用的比较频繁的, 因此将这些功能全部封装在一个类中 头文件 #pragma once #include <stdlib.h> #include <string> ...

  2. JS吧数字转成2进制 8进制16进制数据

    ; number.toString(); //转成2进制 number.toString();//转成8进制 number.toString();//转成10进制 number.toString(); ...

  3. 关于 NSData 的数据类型(2进制,16进制之间)及深入剖析(转)

    . NSData 与 NSString NSData-> NSString NSString *aString = [[NSString alloc initWithData:adataenco ...

  4. ASCII UNICODE UTF "口水文"

    最近接了一个单是需要把非 UTF-8 (No BOM)编码的文件转换成 UTF-8 (No BOM),若此文件是 UTF-8 但带有 BOM ,需要转换成不带 BOM 的.于是开启了一天的阅读.首先花 ...

  5. 关于 NSData 的数据类型(2进制,16进制之间)及深入剖析

    1. NSData 与 NSString NSData-> NSString NSString *aString = [[NSString alloc initWithData:adataenc ...

  6. Oracle中如何进行进制转换(2进制,10进制,16进制)

    1.16进制转换为10进制 可以通过to_number函数实现 SQL> select to_number('19f','xxx') from dual; TO_NUMBER('19F','XX ...

  7. java中 8进制 10进制 2进制 16进制 相互转换

    十进制转成十六进制: Integer.toHexString(int i) 十进制转成八进制 Integer.toOctalString(int i) 十进制转成二进制 Integer.toBinar ...

  8. Delphi - 10进制16进制相互转换

    10进制转16进制 使用IntToHex可以实现十进制到十六进制的转换,注意这里的参数有两个,第一个表示需要被转换的10进制数,第二个表示转换后用几位来显示16进制数. 代码如下: function ...

  9. c#与js中10进制16进制的转化,记录防忘

    js: var param="11"; param=parseInt(param,16);  //17 param=parseInt(param,10);  //11 //后面的参 ...

随机推荐

  1. 201772020113 李清华《面向对象程序设计(java)》第17周学习总结

    1.实验目的与要求 (1) 掌握线程同步的概念及实现技术: (2) 线程综合编程练习 2.实验内容和步骤 实验1:测试程序并进行代码注释. 测试程序1: l  在Elipse环境下调试教材651页程序 ...

  2. eclipse/idea远程调试Linux程序

    第一步.在Tomcat的bin目录下的startup.sh文件的倒数第二行增加“JPDA_ADDRESS=8787”,最后一行在start的前边增加“jpda”,之后重启Tomcat 第二步.配置Ec ...

  3. Win10下VirtualBox安装流程

    一.VirtualBox简介 VirtualBox 是一款开源的虚拟机软件,最初由美国SUN公司开发,后来SUN被Oracle收购,VirtualBox 更名为Oracle VirtualBox .不 ...

  4. wget -r -c -nd

    wget -r -c -nd -r 递归下载 -c 断点续传 -nd 不创建目录, wget默认会创建一个目录 -l1 (L one) 递归一层,只下载指定文件夹中的内容, 不下载下一级目录中的.–n ...

  5. phpstudy打开网页很慢如何处理

    目录下,.env 配置数据库连接改为DB_HOST=127.0.0.1

  6. Nginx+Keepalived(二)

    Linux CentOS7安装Nginx 1.gcc 安装 安装 nginx 需要先将官网下载的源码进行编译,编译依赖 gcc 环境. yum install gcc-c++ 2.PCRE pcre- ...

  7. 大数据入门到精通15--hive 对 date类型的处理

    一.基础日期处理 //date 日期处理select current_date;select current_timestamp;//to_date(time) ;to_date(string)sel ...

  8. scrapy 断点续爬

    第一步:安装berkeleydb数据库 第二部:pip install bsddb3 第三部:pip install scrapy-deltafetch 第四部: settings.py设置 SPID ...

  9. POJOの説明

    参考URL: https://baike.baidu.com/item/POJO/3311958?fr=aladdin https://wenku.baidu.com/view/eba89bbcf12 ...

  10. JVM学习04:类的文件结构

    JVM学习04:类的文件结构 写在前面:本系列分享主要参考资料是  周志明老师的<深入理解Java虚拟机>第二版. 类的文件结构知识要点Xmind梳理