一个汉字占几个字节你真的记住了吗?

用户头像
Java旅途
关注
发布于: 2020 年 06 月 25 日

一个汉字占几个字节是不是不太好记呢,编码不一样则占字节位就不一样。下面用一段简短的代码了解一下一个汉字占几个字节。

示例

String s = "Java旅途";

try {

byte[] bytes1 = s.getBytes("gbk");

for (byte b : bytes1) {

System.out.print(Integer.toHexString(b & 0xff) " ");

}

System.out.println();

byte[] bytes2 = s.getBytes("utf-8");

for (byte b : bytes2) {

System.out.print(Integer.toHexString(b & 0xff) " ");

}

} catch (UnsupportedEncodingException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}



下面是运行结果:





解析

1. Integer.toHexString(int a),这个是java API提供的一个方法,目的是返回整数参数的字符串表示形式,作为16位中的无符号整数。

2. 为什么要用b & 0xff ?

  • Integer.toHexString(int a),需要的是一个int类型的参数。

  • 0xff代表的就是16进制的11111111。

  • 我们知道byte是1个字节,int是4个字节,也就是要将8位转换为32位。如果无符号位的话,我们直接补0即可。因此&0xff就是为了保证符号位。

  • 举个例子:-127转为二进制为11111111,取反求补则为10000001,转十六进制则为81,继续转成十进制,看成无符号数就会发现变成了129。

总结

根据结果我们可看出,

字符串是utf-8编码,一个汉字三个字节,一个字母一个字节。

字符串是gbk编码时,一个汉字两个字节,一个字母一个字节。

如果想看其他编码下的情况,可复制上面的代码,将字符串进行其他编码查看即可。

注意:如果字符串不进行编码,则默认为项目的编码。

发布于: 2020 年 06 月 25 日 阅读数: 51
用户头像

Java旅途

关注

还未添加个人签名 2020.06.17 加入

公众号:Java旅途

评论 (7 条评论)

发布
用户头像
代码可以用代码块编辑,内容再丰富一些就更好了,标题很不错
2020 年 06 月 25 日 13:16
回复
不支持markdown语法吗?这些起来有点困难呀
2020 年 07 月 06 日 16:00
回复
支持的,详情看这个帖子:https://xie.infoq.cn/article/4aa73195b9f0c9815984c7143
2020 年 07 月 06 日 18:04
回复
多谢多谢,那天看了下不支持markdown,都放弃了。。
2020 年 07 月 06 日 18:10
回复
查看更多回复
没有更多了
一个汉字占几个字节你真的记住了吗?