Java 的 char 是两个字节,是怎么存 Utf-8 的字符的?

1. 字符集

计算机只认识“0101”这样的数字,为了在计算机上表示人类所认识的字符,就需要有明确的转换规则,于是便有了字符集。

字符集(Character set)是多个字符的集合,字符集种类较多,每个字符集包含的字符个数不同,常见字符集名称:ASCII字符集、GB2312字符集、BIG5字符集、 GB18030字符集、Unicode字符集等。计算机要准确的处理各种字符集文字,就需要进行字符编码,以便计算机能够识别和存储各种文字。中文文字数目大,而且还分为简体中文和繁体中文两种不同书写规则的文字,而计算机最初是按英语单字节字符设计的,因此,对中文字符进行编码,是中文信息交流的技术基础。

2. ASCII字符集

ASCII ((American Standard Code for Information Interchange): 美国信息交换标准代码)是基于拉丁字母的一套电脑编码系统,主要用于显示现代英语和其他西欧语言。它是最通用的信息交换标准,并等同于国际标准ISO/IEC 646。ASCII第一次以规范标准的类型发表是在1967年,最后一次更新则是在1986年,到目前为止共定义了128个字符。

ASCII最初是美国国家标准,后成为国际标准。1个字节表示1个字符。

3. Unicode

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

Unicode是容纳世界所有文字符号的国标标准编码,使用四个字节为每个字符编码。

4. UTF

UTF是英文 Unicode Transformation Format 的缩写,意为把 Unicode 字符转换为某种格式。

UTF系列编码方案(UTF-8、UTF-16、UTF-32)均是由 Unicode 编码方案衍变而来,以适应不同的数据存储或传递,它们都可以完全表示 Unicode 标准中的所有字符。
目前,这些衍变方案中 UTF-8 被广泛使用,而 UTF-16 和 UTF-32 则很少被使用。

4.1 UTF-8

UTF-8 使用1至4个字节为每个字符编码,其中大部分汉字采用三个字节编码,少量不常用汉字采用四个字节编码。相对来说,英文多的文本,采用UTF-8更省空间(多数为1个字符)。

4.2 UTF-16

使用二或四个字节为每个字符编码,其中大部分汉字采用两个字节编码,少量不常用汉字采用四个字节编码。如果汉字比较多的文本,采用UTF-16会比UTF-8更省空间。

4.3 UTF-32

UTF-32 使用四个字节为每个字符编码,使得 UTF-32 占用空间通常会是其它编码的二到四倍。

5. 结论

java是用UTF-16储存字符的。
Java的char大部分情况下是两个字节(有时是4个字节,如表示emoji)。
Unicode是字符集,不是编码,作用类似于ASCII码。
Java String的length不是字符数。

如果文章有错的地方欢迎指正,大家互相交流。习惯在微信看技术文章,想要获取更多的知识点分享的同学,可以关注微信公众号: code-_-share

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值