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

百度百科介绍:Unicode

如果把各种文字编码形容为各地的方言,那么Unicode就是世界各国合作开发的一种语言。

将世界上所有的文字用2个字节统一进行编码。

为什么会出现Unicode?

英文可以用简单的一个字节就可以标识,但是其他很多语言则不能直接表示,比如阿拉伯语、俄罗斯与、中文、日文,占用空间都会超过1个字节

以汉字“汉”为例,它的 Unicode 码点是 0x6c49,对应的二进制数是 110110001001001,二进制数有 15 位,这也就说明了它至少需要 2 个字节来表示。可以想象,在 Unicode 字典中往后的字符可能就需要 3 个字节或者 4 个字节,甚至更多字节来表示了。

这就导致了一些问题,计算机怎么知道你这个 2 个字节表示的是一个字符,而不是分别表示两个字符呢?这里我们可能会想到,那就取个最大的,假如 Unicode 中最大的字符用 4 字节就可以表示了,那么我们就将所有的字符都用 4 个字节来表示,不够的就往前面补 0。这样确实可以解决编码问题,但是却造成了空间的极大浪费,如果是一个英文文档,那文件大小就大出了 3 倍,这显然是无法接受的。
于是,为了较好的解决 Unicode 的编码问题, UTF-8 和 UTF-16 两种当前比较流行的编码方式诞生了。当然还有一个 UTF-32 的编码方式,也就是上述那种定长编码,字符统一使用 4 个字节,虽然看似方便,但是却不如另外两种编码方式使用广泛。

在Unicode官方资料中,Unicode的编码方式有三种 :UTF-8、UTF-16UTF-32。由于UTF-8与字节序无关(无需BOM),同时兼容ASCII编码,使得UTF-8编码成为现今互联网信息编码标准而被广泛使用。

中文 Unicode互相转换

  1. System.out.println(Integer.toHexString('中'));
  2. char cx = (char) Integer.parseInt("4e2d",16);
  3. char c1='你', c2='a'; char 是='ぁ';
  4. System.out.println(Integer.toHexString(c1));
  5. System.out.println(Integer.toHexString(c2));
  6. System.out.println(Integer.toHexString(是));
  7. char c11 = (char) Integer.parseInt("4f60",16);
  8. char c22 = (char) Integer.parseInt("61",16);
  9. char 是是 = (char) Integer.parseInt("3041",16);
  10. System.out.println(c11);
  11. System.out.println(c22);
  12. System.out.println(是是);