Unicode与UTF

您所在的位置:网站首页 一个汉字占两个字节 Unicode与UTF

Unicode与UTF

2023-06-01 19:31| 来源: 网络整理| 查看: 265

ASCII,Unicode,UTF-8

ASCII字符集: 0XXX_XXXX,只能表示数字,字母,以及一些符号,占用一个字节

GBK字符集:汉字占2个字节,英文数字占一个字节

Unicode

Unicode字符集:万国码,包含了世界上所有的字符

Unicode只是给每个字符分配了一个编号,在早期Unicode字符只使用2个字节就可以表示所有的字符

因此我们常用的字符在Unicode中一般表示为两个字节

随着字符的增多,以及一些其他原因,Unicode进行了扩增

编码范围变为:0X 0_0000 ~ 0X10_FFFF,有17个位面,每个位面有65536个字符

我们常用的大部分字符都在第一个位面中

UTF-8

UTF-8字符集,UTF-8是对Unicode的一种编码,以便有利于字符的传输。

UTF-8中汉字占用3个字节,英文数字占用1个字节

UTF-8的编码方式

0xxxxxxx (ASCii码)

110xxxxx 10xxxxxx 1110xxxx 10xxxxxx 10xxxxxx 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx

Java中的char

Java中的char存储的是Unicode编号,char只占两个字节。如果一个unicode字符占用3个字节,在Java中将变为两个字符。

String str = "ab我们"; System.out.println(Arrays.toString(str.getBytes()));

在这里插入图片描述 第一个字节为a的UTF-8编码,第二个字节为b的UTF-8编码 [-26, -120, -111]是’我‘的UTF-8编码 [-28, -69, -84]是‘们’的UTF-8编码

Java中char存储的是字符的Unicode编号,而不是对他的编码

在这里插入图片描述

char c = '我'; System.out.println("(int)c = " + (int) c); System.out.println("Integer.valueOf(\"6211\",16) = " + Integer.valueOf("6211", 16));

在这里插入图片描述 对于超出两个字节的Unicode字符,在Java中将无法使用char表示 在这里插入图片描述 在这里插入图片描述 运行结果为 在这里插入图片描述

package chartest; import java.util.Arrays; /** * @author 梁** * @create 2023-05-02 10:42 */ public class CharTest { public static void main(String[] args) { String str = "ab我们"; System.out.println(Arrays.toString(str.getBytes())); System.out.println(); char c = '我'; System.out.println("(int)c = " + (int) c); System.out.println("Integer.valueOf(\"6211\",16) = " + Integer.valueOf("6211", 16)); System.out.println(); //char a = '😊'; System.out.println("\"\uD83D\uDE0A\".charAt(0) = " + "😊".charAt(0)); } }


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3