A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

迷茫小王

中级黑马

  • 黑马币:63

  • 帖子:45

  • 精华:0

© 迷茫小王 中级黑马   /  2014-10-15 11:03  /  1700 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 迷茫小王 于 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个字节

6 个回复

倒序浏览
分享下代码吧
回复 使用道具 举报
康师傅-蛋黄派 来自手机 中级黑马 2014-10-15 12:10:29
藤椅
应该是两个字节吧,我记得毕老师视频说可以存在字符里的
回复 使用道具 举报
康师傅-蛋黄派 发表于 2014-10-15 12:10
应该是两个字节吧,我记得毕老师视频说可以存在字符里的

GBK编码下,一个汉字占2个字节;
UTF-8编码下,一个汉字占3个字节
回复 使用道具 举报

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

}
回复 使用道具 举报
没明白楼主到底在问什么,另外 int l = s.getBytes().length;才能运行。
回复 使用道具 举报
zd12345 中级黑马 2014-10-15 14:10:54
7#
汉字占用两个字节
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马