|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
市场分额,java比asp高一点,因为C#是仿照java开发的,所以哦C#能做的java都能做到,但是java能做的,C#不一定都能做到。毕竟是抄袭吗。编码 明天终究把JAVA里一个对照头痛的成绩――字符编码弄明晰了,以是写一篇文章来怀念一下,也为人人供应一点本人的心得。
尽人皆知,JAVA为了国际通用,用的是UNICODE来保留内里的字符。而UNICODE只是一个种字符集,字符的存储和暗示要用到必定的字符编码格局,而与UNICODE对应的字符编码格局就是我们常看到的UTF-8,UTF-16等等,而UTF-8是最经常使用的,以是人们经常把它和UNICODE同等起来(我之前就是如许的),这在某些情形下是没有错的,但如许的了解在JAVA里就会发生一些搅浑。我们用上面的程序来演示一下。
界说一个字符串
Stringname="堂";
这个字符串就一个字符,把它掏出来
charc_name=name.charAt(0);
JAVA里的char型是十六位的(两个字节),可是假如是用UTF-8的话大概会不但两位(UTF-8是变长存储的),那看来JAVA自己并非用UTF-8来保留的,口说无凭,做个实行吧。
起首看看char里保留的内容
intlow=(c_name)&0xff;//取c_name的低位
inthigh=(c_name>>8)&0xff;//取c_name的高位
System.out.println(Integer.toHexString(high)+""+Integer.toHexString(low));
了局是5802
只要两个字节罢了(16位),那末真实的UTF-8编码的内容是甚么呢,再看看吧。
为了便利,我写了一个帮助办法printbyte,感化是把一个byte数组的每一个元素依照十六进制格局打印出来,一样为了便利,我把它作为静态办法。
publicstaticvoidprintbyte(byte[]bt)
{
for(inti=0;i<bt.length;i++)
{
inthex=(int)bt[i]&0xff;
System.out.print(Integer.toHexString(hex)+"");
}
System.out.println("length="+bt.length);
}
byte[]utf_8=name.getBytes("utf-8");
printbyte(utf_8);
了局是e5a082length=3
哇,三个字节!看来JAVA外部用的真不是UTF-8,那用的是甚么呢?UTF-16?看一下便知。
byte[]utf_16=name.getBytes("utf-16");
printbyte(utf_16);
了局是feff5802length=4,靠,四个字节了。咦?前面的低16位不恰是和入手下手c_name的十六进制暗示一样的吗?看来JAVA真实的外部字符编码和UTF-16有或多或少的接洽。JAVA外部事实是用的甚么字符编码呢?这个成绩我也找了好久,厥后在THINKINJAVA3rd的12章里看到一个例子呈现了UTF-16BE,岂非是它?
byte[]utf_16be=name.getBytes("utf-16be");
printbyte(utf_16be);
了局出来了:5802length=2
哈哈,Igotit!未几很多两个字节,内容也一样。公然是它。同时我在内里也看到,UNICODE的编码另有一个LE,这里的BE,LE我想应当是bigendian和littleendian吧。
好了,JAVA里字符的编码总算弄分明了,这是自己的第一篇原创文章,大概很浅薄。假如有甚么不合错误的中央请人人大方指教!感谢。
先说优点,首先和C,C++这些语言比起来,java很简单,去掉指针的java,非常好理解,自动垃圾回收机制也很好,自从JDK1.5推出以后,性能上又有了很大提高。 |
|