在 Java 中,char
类型变量可以存储一个中文汉字,这是因为 char
类型使用 Unicode 编码,而 Unicode 编码字符集包括了大量的汉字。详细解释如下:
Unicode 和 Java 中的 char
类型
-
Unicode 编码:
- Unicode 是一种字符编码标准,目的是为世界上所有的文字和符号提供唯一的编码。它包含了包括拉丁字母、汉字、日文假名、韩文字母、符号、表情符号等在内的多种字符。
- Unicode 的早期版本使用 16 位编码,即每个字符使用两个字节,可以表示 0x0000 到 0xFFFF 之间的 65536 个字符。这称为基本多文种平面(Basic Multilingual Plane,BMP),包含了绝大部分常用字符,包括常用的汉字。
-
Java 中的
char
类型:- Java 的
char
类型是 16 位的无符号整数,范围是从\u0000
(0) 到\uFFFF
(65535)。 - 由于
char
类型与 Unicode 的 BMP 部分完全兼容,所以可以表示 BMP 中的所有字符,包括常用的汉字。
- Java 的
中文汉字在 Unicode 和 Java 中的表示
- 中文汉字在 Unicode 编码中的范围是从
\u4E00
到\u9FFF
,这是 CJK(Chinese, Japanese, Korean)统一汉字区块。 - Java 的
char
类型可以直接存储这些汉字。
public class UnicodeExample {
public static void main(String[] args) {
// 存储汉字
char hanzi = '汉';
// 打印汉字
System.out.println("汉字: " + hanzi);
// 打印汉字的 Unicode 编码值
System.out.println("Unicode 编码值: \\u" + Integer.toHexString(hanzi | 0x10000).substring(1));
}
}
输出:
汉字: 汉
Unicode 编码值: \u6c49
特殊汉字和扩展平面
- Unicode 编码不仅包括 BMP,还包括补充平面(Supplementary Planes),其中包含更多的字符和符号。补充平面的字符编码范围从
\u10000
到\u10FFFF
。 - Java 中的
char
类型是 16 位,无法直接表示这些补充平面的字符。为了表示这些字符,Java 使用了一种称为代理对(surrogate pair)的机制。代理对使用一对 16 位的char
类型来表示一个补充平面的字符。
示例代码(代理对)
public class SurrogatePairExample {
public static void main(String[] args) {
// 表示补充平面的汉字
String hanzi = "\uD842\uDFB7"; //
标签:编码,中文,存贮,字符,汉字,char,Unicode,Java
From: https://blog.csdn.net/m0_70154470/article/details/139755611