小博呀 2022-01-25 14:57 采纳率: 42.9%
浏览 29
已结题

关于java英文,中文所占大小的问题

“人” 转换成byte 显示长度为 3,“b”转换成byte 显示长度也为3,印象中:英文字符占1个字节,中文占两个字节。输出的和显示的不一样,希望能帮我解释一下,谢谢大家!还有,String c = "人",然后c.length()为什么是1。


            String a = "人";
            byte[] byte1 = a.getBytes("UTF-8");
            System.out.println(byte1.length);//输出3
            for (int i = 0;i < byte1.length;i++)
                System.out.print(byte1[i]);//输出-28-70-70

            System.out.println();


            String c = "人";
            System.out.println(c.length());//输出1


            String b = "b";
            byte[] byte2 = a.getBytes("UTF-8");
            System.out.println(byte2.length);// 3

            for (int i = 0;i < byte2.length;i++)
                System.out.print(byte2[i]);//输出-28-70-70
  • 写回答

1条回答 默认 最新

  • Tomshidi 2022-01-25 15:05
    关注
    1. "人"转换成byte显示长度为3,是因为你用的UTF-8编码,在这个编码里,所有的字符字节长度都是3,当然包括英文字符。
    2. 你可以看看转换出来的3个byte的数值大小,中文要明显大于英文。这也就是有些教材中说的英文1个字节,中文2个字节的由来,因为一个字节存不下中文的编码值。
    3. c.length()获取的是字符的个数,字符的个数!=字符的字节数。字符的个数就是你眼睛实际看到的数量。
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 2月2日
  • 已采纳回答 1月25日
  • 创建了问题 1月25日

悬赏问题

  • ¥15 c语言怎么用printf(“\b \b”)与getch()实现黑框里写入与删除?
  • ¥20 怎么用dlib库的算法识别小麦病虫害
  • ¥15 华为ensp模拟器中S5700交换机在配置过程中老是反复重启
  • ¥15 java写代码遇到问题,求帮助
  • ¥15 uniapp uview http 如何实现统一的请求异常信息提示?
  • ¥15 有了解d3和topogram.js库的吗?有偿请教
  • ¥100 任意维数的K均值聚类
  • ¥15 stamps做sbas-insar,时序沉降图怎么画
  • ¥15 买了个传感器,根据商家发的代码和步骤使用但是代码报错了不会改,有没有人可以看看
  • ¥15 关于#Java#的问题,如何解决?