黑马程序员技术交流社区

标题: {学习总结}汉字到底占几个字节byte [打印本页]

作者: 迷茫小王    时间: 2014-10-15 11:03
标题: {学习总结}汉字到底占几个字节byte
本帖最后由 迷茫小王 于 2014-10-15 11:03 编辑

    前几天做自测题遇到了一个问题,题目如下:编写函数,从一个字符串中按字节数截取一部分,但不能截取出半个中文(GBK码表),例如:从“HM程序员”中截取2个字节是“HM”,截取4个则是“HM程”,截取3个字节也要是"HM"而不要出现半个中文。

    我在做的过程中遇到了一个问题,同一行代码在不同的操作系统下得出的结果不一致。    //我平常用macbook学习,但是女朋友下班后要用macbook看电视剧,我只能用她的windows继续编程...大家勿喷。
   例如在Java代码中定义一个字符串:String s="HM程序员";
   在windows操作系统下调用 s.getByte().length时,结果为8。但是在Mac OS下调用,结果为11!
   其原因究竟为何:不管在编译前java文件使用何种编码,在编译后成class后,他们都是一样的----Unicode编码表示。
   但是当调用s.getByte()的时候,此方法使用平台默认的字符集来获取字符串对应的字节数组。
   windows平台默认采用GBK编码,而MAC OS默认采用UTF-8编码,那么这时问题就来了,到底一个汉字在不同的编码方式中占几个字节呢?
总结如下:
GBK编码下,一个汉字占2个字节;
UTF-8编码下,一个汉字占3个字节
UTF-8是一种国际通用的一种变长编码,ASCII对应的字符在UTF-8下占1个字符,西方文字(希腊文字)占2个字符,中文占用3个字节数,还有平面符号占4个字节


作者: 在学野马    时间: 2014-10-15 11:35
分享下代码吧
作者: 康师傅-蛋黄派    时间: 2014-10-15 12:10
应该是两个字节吧,我记得毕老师视频说可以存在字符里的
作者: 迷茫小王    时间: 2014-10-15 12:49
康师傅-蛋黄派 发表于 2014-10-15 12:10
应该是两个字节吧,我记得毕老师视频说可以存在字符里的

GBK编码下,一个汉字占2个字节;
UTF-8编码下,一个汉字占3个字节
作者: 迷茫小王    时间: 2014-10-15 12:52
在学野马 发表于 2014-10-15 11:35
分享下代码吧

public class HanZi
{
       public static void main(String[] args)
       {
               String s = "HM程序员";
               int l = s.getByte().length;
               System.out.println(l);
       }

}
作者: 刘树弘    时间: 2014-10-15 13:18
没明白楼主到底在问什么,另外 int l = s.getBytes().length;才能运行。
作者: zd12345    时间: 2014-10-15 14:10
汉字占用两个字节




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2