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


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

    示例

    String s = "情系IT";
            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编码时,一个汉字两个字节,一个字母一个字节。

    如果想看其他编码下的情况,可复制上面的代码,将字符串进行其他编码查看即可。
    注意:如果字符串不进行编码,则默认为项目的编码。

    如果文章对您有帮助,请记得点赞关注哟~
    欢迎大家关注我的公众号:情系IT,每日推送技术文章供大家学习参考。

  • 相关阅读:
    剑指 Offer 25. 合并两个排序的链表
    剑指 Offer 26. 树的子结构
    剑指 Offer 27. 二叉树的镜像
    剑指 Offer 29. 顺时针打印矩阵
    剑指 Offer 30. 包含min函数的栈
    剑指 Offer 22. 链表中倒数第k个节点
    选轻量应用服务器还是云服务器ECS?一图彻底搞懂
    征文投稿丨使用云服务器ECS快速搭建halo博客
    运营给产品送的情人节礼物是?
    阿里云张献涛:自主最强DPU神龙的秘诀
  • 原文地址:https://www.cnblogs.com/zhixie/p/11968710.html
Copyright © 2020-2023  润新知