什么是ASCII码和Unicode码

什么是ASCII码和Unicode码,第1张

分类: 电脑/网络 >> 软件

解析:

目前计算机中用得最广泛的字符集及其编码,是由美国国家标准局(ANSI)制定的ASCII码(American Standard Code for Information Interchange,美国标准信息交换码),它已被国际标准化组织(ISO)定为国际标准,称为ISO 646标准。适用于所有拉丁文字字母,ASCII码有7位码和8位码两种形式。

因为1位二进制数可以表示(21=)2种状态:0、1;而2位二进制数可以表示(22)=4种状态:00、01、10、11;依次类推,7位二进制数可以表示(27=)128种状态,每种状态都唯一地编为一个7位的二进制码,对应一个字符(或控制码),这些码可以排列成一个十进制序号0~127。所以,7位ASCII码是用七位二进制数进行编码的,可以表示128个字符。

第0~32号及第127号(共34个)是控制字符或通讯专用字符,如控制符:LF(换行)、CR(回车)、FF(换页)、DEL(删除)、BEL(振铃)等;

通讯专用字符:SOH(文头)、EOT(文尾)、ACK(确认)等;

第33~126号(共94个)是字符,其中第48~57号为0~9十个 数字;65~90号为26个大写英文字母,97~122号为26个小写英文字母,其余为一些标点符号、运算符号等。

注意:在计算机的存储单元中,一个ASCII码值占一个字节(8个二进制位),其最高位(b7)用作奇偶校验位。所谓奇偶校验,是指在代码传送过程中用来检验是否出现错误的一种方法,一般分奇校验和偶校验两种。奇校验规定:正确的代码一个字节中1的个数必须是奇数,若非奇数,则在最高位b7添1;偶校验规定:正确的代码一个字节中1的个数必须是偶数,若非偶数,则在最高位b7添1。

Unicode码:Unicode码也是一种国际标准编码,采用二个字节编码,与ANSI码不兼容。目前,在网络、Windows系统和很多大型软件中得到应用。

& # 26102;& # 38388 utf-8的

\u65f6\u95f4 UNICODE 编码

UTF是 Unicode Translation Format,即把Unicode转做某种格式的意思。 在Unicode基本多文种平面定义的字符(无论是拉丁字母、汉字或其他文字或符号),一律使用2字节储存。而在辅助平面定义的字符,会以代理对(surrogate pair)的形式,以两个2字节的值来储存。

unicode是一种编码方式,和ascii是同一个概念,而UTF是一种存储方式(格式)。

在jvm内部,虚拟机管理数据(内存里)时,或者在进行对象序列化的时候,字符(串)都是以unicode编码方式的。

但是在jvm中,字符(串)是以char 这种(存储)形式存放的,一个char占2个字节(例如可以定义char c='字'),就是“字”和“Z”是同样占2个字节的;而在对象序列化后,对象是进行UTF-8存储的,一个中文占2个字节,而英文、数字等只占一个字节,可以参看下面的链接。

所以导致系列化以后的对象只占平时的大约一半的空间(当全是中文时占用相同的空间;全是英文时unicode占用的空间是UTF-8的2倍)。

UTF-16比起UTF-8,好处在于大部分字符都以固定长度的字节 (2字节) 储存,但UTF-16却无法兼容于ASCII编码。

写Latex的时候,从PDF或者网页上复制一些文本粘贴之后提示混有Unicode字符,因为文档没有引入Unicode适配包,所以报错。

如下面的一段文本,混有几个Unicode字符:

上面的文本中,u_n后面的空格,u_{n-1}的减号,末尾edit的"d"、"ƍ"和叹号,都是非ASCII字符。部分Unicode字符和一般的ASCII字符外观十分接近,难以辨别。

如何比较简单的找出字符串里的“叛徒”?

利用VScode/Sublime Text/UE/notepad++/在线正则匹配网站等支持 正则匹配 的文本编辑工具,在搜索框输入下面的正则表达式(注意要 开启正则匹配 ,一般是点亮搜索框右侧的一个" "图标),非ASCII字符就会高亮,并显示总计个数。

1 上面表达式的含义是查找所有Unicode编码不在U+0020到U+007F之间的字符(即基本拉丁文字符编码范围)。

2 如需根据情况允许标准控制字符,则区间应改为U+0000到U+007F。

3 关于Unicode编码表: >

我们在实际开发中, 经常需要处理文本信息, 组成文本的单元我们称之为字符

计算机只能处理0和1, 不能直接处理这些字符, 比如说对字符的读取和存储

为了解决这个问题, 我们可以建立一个数字与字符的关联关系, 比如说使用97 -> a, 98 -> b, 99 -> c依据数字可以查询对应字符, 依据字符可以查询对应数字

这样我们需要处理字符的时候, 就可以先查询这个映射, 找到字符对应的数字, 然后把这个数字转换成二进制存储即可, 读取的时候亦然

计算机最早是美国发明的, 所以一开始只需要处理英文的字符就可以了, 也就是ascii字符集 后来计算机越来越普及, 更多的国家开始使用计算机, 这个时候就需要处理更多的字符, 比如说中文字符, 日韩字符由于ascii字符集不支持, 所以各个国家也产生了许多支持更多字符的字符集, 比如说支持简体中文的gb2312字符集, 支持简体中文、繁体中文和日韩字符的gbk字符集

多个字符集的问题:

为了解决上述多个字符集的问题, 我们需要一个维护所有字符, 统一的字符集, 我们称之为unicode字符集 uniocde140版本, 一共收录了144697个字符

unicode解决了字符集统一的问题, 接下来还需要制定相应的编码规则

最简单粗暴的编码规则, 所有码点都使用相同长度的字节来表示, 比如说现在已知的字符数量大概14W多, 可以使用三个字节来表示(0 ~ 16777216)

优点: 编码简单

缺点: 不够节约空间, 只需要使用一个字节和两个字节表示的字符也使用了三个字节来表示

针对不同范围的码点, 使用不同长度的字节序列来表示

utf-8就是一种变长编码

utf-8编码规则, 是一种前缀编码规则, 每一个字节都是由标志位 + 实际编码位组成, 第一个开始字节的高位1的个数表示这个编码占用了几个字节, 只占用一个字节的时候比较特殊, 使用0作为高位标志位

为什么占用多个字节时, 除了第一个开始字节外, 后续的字节也需要10作为前缀标志位

utf编码和解码图示:

以上就是关于什么是ASCII码和Unicode码全部的内容,包括:什么是ASCII码和Unicode码、关于Uncode编码的问题、ASCII字符串中找出混合的unicode字符(非ASCII字符)的方法等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/9703682.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-01
下一篇 2023-05-01

发表评论

登录后才能评论

评论列表(0条)

保存