可能是2个、3个、4个字节。不同的编码格式占字节数是不同的,UTF-8编码下一个中文所占字节也是不确定的
代码如下:
public class EncodeTest {
public static void main(String[] args) throws UnsupportedEncodingException {
String name = "中国nihao";
System.out.println("UTF-8编码长度:" + name.getBytes("UTF-8").length);
System.out.println("ASCII编码长度:" + name.getBytes("ASCII").length);
System.out.println("GBK编码长度:" + name.getBytes("GBK").length);
System.out.println("GB2312编码长度:" + name.getBytes("GB2312").length);
System.out.println("==========================================");
String c = "c";
System.out.println("UTF-8编码长度:" + c.getBytes("UTF-8").length);
System.out.println("ASCII编码长度:" + c.getBytes("ASCII").length);
System.out.println("GBK编码长度:" + c.getBytes("GBK").length);
System.out.println("GB2312编码长度:" + c.getBytes("GB2312").length);
System.out.println("==========================================");
}
}
>>> 结果如下:
UTF-8编码长度:11
ASCII编码长度:7
GBK编码长度:9
GB2312编码长度:9
==========================================
UTF-8编码长度:1
ASCII编码长度:1
GBK编码长度:1
GB2312编码长度:1
==========================================
java中理论上一个字符占用两个字节,可以推导下。
unicode编码是固定长度的16位,也就是2两个字节代表一个字符。Unicode只是一个编码规范,目前实际实现的unicode编码只要有三种:UTF-8,UCS-2和UTF-16,三种unicode字符集之间可以按照规范进行转换。
- UTF-8
UTF-8就是在互联网上使用最广的一种Unicode的实现方式,是Unicode的实现方式之一。
UTF-8最大的一个特点,就是它是一种变长的编码方式。它可以使用1~6个字节表示一个符号,根据不同的符号而变化字节长度。
关于UTF-8,汉字占几个字节的问题
占2个字节的:〇(〇有两个读音 xīng líng,(一) xīng 同“星”;(二) líng 同“零”。)
占3个字节的:基本等同于GBK,含21000多个汉字
占4个字节的:中日韩超大字符集里面的汉字,有5万多个
一个utf8数字占1个字节
一个utf8英文字母占1个字节
2. ASCII码
在计算机内部,所有的信息最终都表示为一个二进制的字符串。每一个二进制位(bit)有0和1两种状态,因此八个二进制位就可以组合出256种状态,这被称为一个字节(byte)。也就是说,一个字节一共可以用来表示256种不同的状态,每一个状态对应一个符号,就是256个符号,从0000000到11111111。
ASCII码一共规定了128个字符的编码(0 000 0000–0 111 1111),比如空格”SPACE”是32(二进制00100000),大写的字母A是65(二进制01000001)。这128个符号(包括32个不能打印出来的控制符号),只占用了一个字节的后面7位,最前面的1位统一规定为0。
3. GB2312又称国标码
GB2312由国家标准总局发布,1981年5月1日实施,通行于大陆。它是一个简化字的编码规范,当然也包括其他的符号、字母、日文假名等,共7445个图形字符,其中汉字占6763个。我们平时说6768个汉字,实际上里边有5个编码为空白,所以总共有6763个汉字。
4. GBK是GB2312的扩展
GBK是向上兼容的,因此GB2312中的汉字的编码与GBK中汉字的相同,GBK中还包含繁体字的编码。
GBK中每个汉字仍然包含两个字节,第一个字节的范围是0x81-0xFE(即129-254),第二个字节的范围是0x40-0xFE(即64-254)。GBK中有码位23940个,包含汉字21003个。