当前页面: 开发资料首页 → J2SE 专题 → 汉字问题
汉字问题
摘要: 汉字问题
java中的中文长度是1,这和C中的中文长度不一样,能否在保证字符串内容不变的情况下,使中文长度和C语言一致呢,谢谢
在JAVA中char和byte是两个不同的概念。
而在C中,如果你使用宽字符集,中英文字符的长度也是一样的。
那是不是就没有办法了?郁闷啊
在Java的String上调用getBytes,返回的byte数组,其性质倒是很像楼主想要的东西。:)
比如:
String s = "我常来CSDN";
System.out.println(s.length());//会打印出7
byte[] bytes = s.getBytes();
System.out.println(bytes.length);//会打印出10
s.getBytes();请谨慎使用。这个会使用系统的默认编码来转换。应该明确指定编码。
public class TestInner {
public static void main(String[] args) throws Exception {
System.out.println("A".getBytes("ASCII").length);
System.out.println("汉".getBytes("ASCII").length);
System.out.println("A".getBytes("GBK").length);
System.out.println("汉".getBytes("GBK").length);
}
}
楼上有经验!
赞!!
ncowboy大侠说的是对的。
我刚写下那几会代码时,其实也写了个“GBK”的,后来想到并非每种平台都支持GBK的,干粹就去掉了,让系统自己看着办去吧,呵呵。
GB2312 "汉"字也是两位呀
有点迷糊了
不是两位三位的问题,如果系统中不支持GBK,getBytes会出错的。
出错了可以理解呀
可是
System.out.println("汉".getBytes("ASCII").length);是一位,而
System.out.println("汉".getBytes("GB2312").length);是两位就有点不理解了
MS932:1
ASCII:1
GB2312:2 //***
Unicode:4
utf-8:3 //***
iso-8859-1:1
utf-16:4 //***
utf-16be:2 //***
utf-16le:2
唉
看来还得查查编码的问题呀
找来找去还是回来了CSDN :)
有兴趣大家也看看
http://blog.csdn.net/NetMicrobe/archive/2006/10/10/1329393.aspx