ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

【计算机组成原理】 字符集ASCII \ Unicode编码详解1

2022-06-18 00:31:36  阅读:211  来源: 互联网

标签:字符 编码 UTF 16 字符集 Unicode ASCII


字符集ASCII 

1=列0011+ 行0001

y=F(x):y等于二进制 f等于映射规则 就是指ascii、unicode之类的,x等于字符

 

 

 ASCII码数字(0~9)编码低就采用BCD编码:48(0011 0000)~57(0011 1001) 低四位就采用 BCD编码

 

Unicode定义:

Unicode(统一码、万国码、单一码)是计算机科学领域里的一项业界标准,包括字符集、编码方案等。Unicode 是为了解决传统的字符编码方案的局限而产生的,它为每种语言中的每个字符设定了统一并且唯一的二进制编码,以满足跨语言、跨平台进行文本转换、处理的要求。
ASCll码与Unicode编码不同

对于很多初学者来说,特别容易将这两个概念混淆,认为ASCLL码就是Unicode编码,这是明显错误的。
我们知道:1个byte=8bit,1个bit=1位二进制数,一位二进制数又可以用0或者1来表示。所以一个字节能表示最大的数字就是256。计算机是美国人发明的,而英文中涉及的编码并不多,一个字节可以表示所有字符了,所以ASCII(American national Standard Code for Information Interchange,美国国家标准信息交换码)编码就成为美国人的标准编码。ASCLL码虽然并须全面,但在所有字符集中,最知名的可能要数被称为ASCII的8位字符集了。
Unicode编码的由来:

我们都知道中文的字符肯定不止256个汉字,使用ASCII编码来处理中文显然是不够的,所以中国制定了GB2312编码,用两个字节表示一个汉字,碰到及其特殊的情况,还会用三个字节来表示一个汉字。GB2312还把ASCII包含进去了。同理,日文,韩文等上百个国家为了解决这个问题发展了一套自己的编码,于是乎标准越来越多,如果出现多种语言混合显示就一定会出现乱码。那么针对这种编码“乱象”,Unicode便应运而生了,其将所有语言统一到一套编码规则里。
Unicode编码的问题:

ASCII编码是1个字节,而Unicode编码通常是2个字节。
字母A用ASCII编码是十进制的65,二进制的01000001;
字符0用ASCII编码是十进制的48,二进制的00110000,注意字符’0’和整数0是不同的;
汉字中已经超出了ASCII编码的范围,用Unicode编码是十进制的20013,二进制的01001110 00101101。
你可以猜测,如果把ASCII编码的A用Unicode编码,只需要在前面补0就可以,因此,A的Unicode编码是00000000 01000001。

新的问题又出现了:如果统一成Unicode编码,乱码问题从此消失了。但是,如果你写的文本基本上全部是英文的话,用Unicode编码比ASCII编码需要多一倍的存储空间,在存储和传输上就十分不划算。
正是由于这样的原因,使得Unicode编码一时间很难推广,于是,为了较好的解决 Unicode 的编码问题, UTF-8 和 UTF-16 应运而生。
UTF-8

UTF-8 是目前互联网上使用最广泛的一种 Unicode 编码方式,它的最大特点就是可变长。它可以使用 1 - 4 个字节表示一个字符,根据字符的不同变换长度。UTF-8 的编码规则很简单,只有二条:

(1)对于单字节的符号,字节的第一位设为0,后面7位为这个符号的 Unicode 码。因此对于英语字母,UTF-8 编码和 ASCII 码是相同的。

(2)对于需要使用 N 个字节来表示的字符(N > 1),第一个字节的前 N 位都设为 1,第 N + 1 位设为0,剩余的 N - 1 个字节的前两位都设位 10,剩下的二进制位则使用这个字符的 Unicode 码点来填充。
编码规则如下
在这里插入图片描述

 

 

UTF-16

在了解 UTF-16 编码方式之前,先了解一下另外一个概念——“平面”。

在上面的介绍中,提到了 Unicode 是一本很厚的字典,她将全世界所有的字符定义在一个集合里。这么多的字符不是一次性定义的,而是分区定义。每个区可以存放 65536 个(2^16)字符,称为一个平面(plane)。目前,一共有 17 个(2^5)平面,也就是说,整个 Unicode 字符集的大小现在是 2^21。

最前面的 65536 个字符位,称为基本平面(简称 BMP ),它的码点范围是从 0 到 2^16-1,写成 16 进制就是从 U+0000 到 U+FFFF。所有最常见的字符都放在这个平面,这是 Unicode 最先定义和公布的一个平面。剩下的字符都放在辅助平面(简称 SMP ),码点范围从 U+010000 到 U+10FFFF。

接下来我们再谈UTF-16,UTF-16编码采用了不同长度的编码表示所有的Unicode码点。在基本的多语言级别中,每个字符用16位表示,通常被称为代码单元;而辅助字符采用一对连续的代码单元进行编码。这样构成的编码值一定落入基本的多语言级别中空闲的2048字节内,通常被称为替代区域(surrogate area)[U+D800–U+DBFF用于第一个代码单元,U+DC00–U+DFFF用于第二个代码单元]。这样设计十分巧妙,我们可以迅速地知道一个代码单元是一个字符的编码,还是一个辅助字符的第一或第二部分。

在Java中,char类型用UTF-16编码描述一个代码单元。所以在Java编程中强烈建议不要使用char类型,除非确实需要对UTF-16代码单元操作。最好将需要处理的字符串用抽象数据类型表示。
Unicode编码与文字处理

在文字处理方面,Unicode为每一个字符而非字形定义唯一的代码(即一个整数)。换句话说,统一码以一种抽象的方式(即数字)来处理字符,并将视觉上的演绎工作(例如字体大小、外观形状、字体形态、文体等)留给其他软件来处理,例如网页浏览器或是文字处理器。

乱码问题

乱码问题  

 

标签:字符,编码,UTF,16,字符集,Unicode,ASCII
来源: https://www.cnblogs.com/cdaniu/p/16387474.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有