仓酷云

标题: JAVA编程:JAVA里字符编码的探究与了解 [打印本页]

作者: 金色的骷髅    时间: 2015-1-18 11:22
标题: JAVA编程:JAVA里字符编码的探究与了解
市场分额,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推出以后,性能上又有了很大提高。
作者: 不帅    时间: 2015-1-20 22:05
设计模式是高级程序员真正掌握面向对象核心思想的必修课。设计模式并不是一种具体"技术",它讲述的是思想,它不仅仅展示了接口或抽象类在实际案例中的灵活应用和智慧
作者: 小魔女    时间: 2015-1-27 08:10
不过,每次的执行编译后的字节码需要消耗一定的时间,这同时也在一定程度上降低了 Java 程序的运行效率。
作者: 谁可相欹    时间: 2015-2-2 22:09
是一种使网页(Web Page)由静态(Static)转变为动态(Dynamic)的语言
作者: 变相怪杰    时间: 2015-2-6 02:35
任职于太阳微系统的詹姆斯·高斯林等人于1990年代初开发Java语言的雏形,最初被命名为Oak,目标设置在家用电器等小型系统的程序语言
作者: 海妖    时间: 2015-2-15 01:49
还好,SUN提供了Javabean可以把你的JSP中的 Java代码封装起来,便于调用也便于重用。
作者: 简单生活    时间: 2015-2-25 21:56
多重继承(以接口取代)等特性,增加了垃圾回收器功能用于回收不再被引用的对象所占据的内存空间,使得程序员不用再为内存管理而担忧。在 Java 1.5 版本中,Java 又引入了泛型编程(Generic Programming)、类型安全的枚举、不定长参数和自动装/拆箱等语言特性。
作者: 第二个灵魂    时间: 2015-3-7 09:28
学Java必读的两个开源程序就是Jive和Pet Store.。 Jive是国外一个非常著名的BBS程序,完全开放源码。论坛的设计采用了很多先进的技术,如Cache、用户认证、Filter、XML等,而且论坛完全屏蔽了对数据库的访问,可以很轻易的在不同数据库中移植。论坛还有方便的安装和管理程序,这是我们平时编程时容易忽略的一部份(中国程序员一般只注重编程的技术含量,却完全不考虑用户的感受,这就是我们与国外软件的差距所在)。
作者: 若相依    时间: 2015-3-14 17:07
科学超级计算机、移动电话和互联网,同时拥有全球最大的开发者专业社群。
作者: 乐观    时间: 2015-3-21 12:20
那么我书也看了,程序也做了,别人问我的问题我都能解决了,是不是就成为高手了呢?当然没那么简单,这只是万里长征走完了第一步。不信?那你出去接一个项目,你知道怎么下手吗,你知道怎么设计吗,你知道怎么组织人员进行开发吗?你现在脑子里除了一些散乱的代码之外,可能再没有别的东西了吧!




欢迎光临 仓酷云 (http://ckuyun.com/) Powered by Discuz! X3.2