您现在的位置是:房产观察 > 百科 > 百科知识 >
character是什么意思(character用法)
2023-04-19 20:50百科知识 人已围观
文章目录[隐藏]
- 什么是字符集?什么是编码?
- 为什么要区分字符集和编码?
- Unicode为什么这么特别?
- Jav深圳生活网一个挖掘序列文章
为什么String要设计成final,如何设计一个不可变的类?“留下了一个与编码相关的问题。在Java中,理论上说一个字符(汉字字母)占用两个字节。但在UTF-8,新字符串(“字”)。getBytes()。对于3个字节,长度返回3。你知道为什么吗?Java中char占多少字节?
在回答这个问题之前,我们先来学习一些基础知识。
什么是字符集?什么是编码?
文字是文字和符号的总称,包括文字、图形符号、数学符号等。抽象字符的字符集是一个字符集。
之所以说“抽象”二字,是因为这里所说的文字是没有任何具体形式的文字。比如文章中看到的“韩”这个人物,其实就是这个人物的具体表现,也是这个人物的形象表现。人们在读“汉”字时,用的是另一种具体表现形式——声音。但无论如何,这两种表现形式都是指这个汉字,同一个字可能有无数种表现形式(点阵法、矢量法、音频等。),而且每种表现形式中相同的字符都会被包含在字符集中,这样会使集合过大。所以抽象字符集中的所有字符都是指唯一存在的抽象字符,而忽略了它的具体表现形式。给定抽象字符集中的每个字符被赋予一个整数后,字符集就会有一个顺序,成为一个编码字符集。同时,这个数字可以唯一确定它所指的是哪个字符。对于同一个字符,不同的字符集编码系统指定不同的整数。例如,单词“Er”在Unicode中编号为0x513F,这意味着它是Unicode中的0X513F字符。在另一个编码字符集中,这个字是0xA449。
编码字符集指的是这一组分配了整数的字符,但分配给编码字符集中字符的整数不一定是字符存储在计算机中时使用的值。用什么二进制整数值来表示存储在计算机中的字符,是由字符集编码决定的。
字符集编码决定了如何将字符的整数映射到二进制整数值。在几乎所有英文字符的字符集编码中,英文字母的整数与存储在计算机中的二进制形式是一致的。然而,在一些编码方法中,如Unicode字符集的UTF-8编码,很大一部分字符的整数被转换并存储在计算机中。例如,“中文”的Unicode值为0x6C49,但其编码格式为UTF-8格式,值为0xE6B189 (3字节)。
编码字符集中的每个字符对应一个唯一的代码值。这些码值称为码点,可以看作是字符在编码字符集中的序号。给定编码方式下字符的二进制位序列称为代码单元。
注意:我们在这里介绍了两个概念,代码点和代码元素。
为什么要区分字符集和编码?
在早期,字符集和编码是一对一的。有许多字符编码方案。一个字符集只有一个编码实现,它们之间是一一对应的。比如GB2312,在这种情况下,不管你怎么称呼它们,比如“GB2312编码”和“GB2312字符集”,其实都是一回事,也许它并没有做什么特别的区分,所以无论如何都不会错。
说到Unicode,就不一样了。唯一的Unicode字符集对应三种编码:UTF-8、UTF-16和UTF-32。字符集和编码的概念是完全分离和模块化的,这在Unicode时代其实是被广泛认可的。
1)charset是character set的缩写,即字符集。
2)编码是charset编码的缩写,即字符集编码。
从上图可以清楚地看出,
1.编码依赖于字符集,就像代码中的接口实现依赖于接口;
2.一个字符集可以有多个代码实现,就像一个接口可以有多个实现类一样。
Unicode为什么这么特别?
要想出新的字符集标准,旧的字符集字符不够。
Unicode的目标是统一所有字符集,包含所有字符,所以不需要调整任何新的字符集。
但是如果你觉得它现有的编码方案不是很好呢?当一个新的字符集无法创建时,我们只能在编码上做文章,于是有了很多实现,传统的一一对应被打破。
从上图可以看出,由于历史原因,你也会看到Unicode和UTF-8在很多地方混在一起的情况。在这种情况下,Unicode通常是UTF-16或更早的UCS-2编码。
现在我们已经谈了很多关于Unicode的内容。由于种种原因,我们必须承认“Unicode”这个词在不同的上下文中有不同的含义。它可以指:
1)Unicode标准
2)Unicode字符集
3)3)Unicode的抽象编码(数字),即码位。
4)4)Unicode的具体编码实现,通常是长度可变的UTF-16,或者更早的16位固定长度的UCS-2。
这里着重介绍UTF-16编码。UTF-16将Unicode字符集的码点映射到一个16位整数序列(即长度为2个字节的符号)中,用于数据存储或传输。Unicode字符的码点需要一个或两个16位符号来表示,所以这是一个可变长度的表示。
UTF-16可以看作是UCS-2的父集。UTF-16和UCS-2在没有辅助平面字符之前指的是同一个意思(基本思路是用两个16位代码代表一个字符,只针对65535以上的字符)。引入辅助平面字符后,称为UTF-16。
现在如果有软件宣称支持UCS-2编码,实际上是暗示不能支持UTF-16中超过2字节的词集。对于小于0x10000的UCS代码,UTF-16编码等同于UCS代码。
为什么要重点关注UTF-16编码?因为Java的内部代码使用的是UTF-16编码,也就是我们常说的Unicode编码。
没想到会这么久。我只是介绍了字符集和编码的区别。看来我得分两篇来回答上一篇留下的问题了。这篇文章的总结其实就是两句话:
编码字符集中每个字符的指定顺序称为码位,该字符在编码字符集中的序号,以及给定编码方式的二进制序列称为码单元。
在Java的世界里,我们接触到的更多的是外部代码,也就是程序与外界交互时对外使用的字符编码,但还有更多你不知道的。期待下次我们正式进入Java的编码世界,最后回答前面的问题。
Jav深圳生活网一个挖掘序列文章
你真的懂Java里的String吗?
为什么String要设计成final,如何设计不可变类?
以上内容就是为大家推荐的character是什么意思(character用法)
相关推荐:
上海泰康大楼 有什么好户型推荐 竣工验收要注意这
character是什么意思(character用法)
语音朗读