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