易截截图软件、单文件、免安装、纯绿色、仅160KB

初学入门:JAVA里字符编码的探索与理解

今天终于把JAVA里一个比较头痛的问题——字符编码弄清晰了,所以写一篇文章来纪念一下,也为大家提供一点自己的心得。
  众所周知,JAVA为了国际通用,用的是UNICODE来保存里面的字符。而UNICODE只是一个种字符集,字符的存储和表示要用到一定的字符编码格式,而与UNICODE对应的字符编码格式就是我们常看到的UTF-8,UTF-16等等,而UTF-8是最常用的,所以人们常常把它和UNICODE等同起来(我以前就是这样的),这在某些情况下是没有错的,但这样的理解在JAVA里就会产生一些混淆。我们用下面的程序来演示一下。
  定义一个字符串
  String name = "堂";
  这个字符串就一个字符,把它取出来
  char c_name = name.charAt(0);
  JAVA里的char型是十六位的(两个字节),但是如果是用UTF-8的话可能会不只两位(UTF-8是变长存储的),那看来JAVA本身并不是用UTF-8来保存的,口说无凭,做个实验吧。
  首先看看char里保存的内容  
int low = (c_name) & 0xff;//取c_name的低位
  int high = (c_name >> 8) & 0xff;//取c_name的高位
  System.out.println(Integer.toHexString(high) + " " + Integer.toHexString(low));
  结果是58 02
  只有两个字节而已(16位),那么真正的UTF-8编码的内容是什么呢,再看看吧。
  为了方便,我写了一个辅助方法printbyte,作用是把一个byte数组的每个元素按照十六进制格式打印出来,同样为了方便,我把它作为静态方法。
 public static void printbyte(byte[] bt)
  {
  for (int i = 0; i < bt.length; i++)
  {
  int hex = (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);
  结果是e5 a0 82 length = 3
  哇,三个字节!看来JAVA内部用的真不是UTF-8,那用的是什么呢?UTF-16?看一下便知。  
byte[] utf_16 = name.getBytes("utf-16");
  printbyte(utf_16);
  结果是fe ff 58 02 length = 4


相关文档:

使用JAVA技术实现新一代OSS/BSS

      OSS/BSS是电信运营商的一体化、信息资源共享的支持系统,它主要由网络管理、系统管理、计费、营业、账务和客户服务等部分组成,系统间通过统一的信息总线有机整合在一起。它不仅能在帮助运营商制订符合自身特点的运营支撑系统的同时帮助确定系统的发展方向,还能帮助用户制订系统的整合标准 ......

Java基础方面

1、作用域public,private,protected,以及不写时的区别
答:区别如下:
作用域           当前类       同一package  子孙类       其他package
public        ......

我们团队的Java之路的规划

Java之路计划
说明:由于我们团队其他成员都不是做java开发的,但是马上都要集体转向Java,所以是我整理了一下,还是比较适用于初学者的,高手们也可以提提意见
       在开始这个计划前,我想还是想和大家分享一下我对未来Java之路的憧憬,虽然Java的母公司Sun在经受着Oracle公司收购,导 ......

Java+Oracle应用开发的几个问题


问题一:如保加载JDBC驱动程序:
  正常我们加载驱动程序有三个途径:
  1)Class.forName(String)这想当于classLoader一个String指定的类,在装载时把该驱动程序的静态内容都初始化,其实这时驱动程序类调用了DriverManager.registerDriver(driver)方法
  2)使用系统属性:System.getProperty().load(new Fil ......

在JAVA 源程序中编写SQL语句时使用ORACLE 绑定变量

在JAVA中的SQL 语句的编写方面,没有使用ORACLE 绑定变量,很大程度上降低了数据库的性能,表现在两个方面:
 
1、SQL语句硬分析(Hard Parse)太多,严重消耗CPU资源,延长了SQL语句总的执行时间
SQL语句的执行过程分几个步骤:语法检查、分析、执行、返回结果。其中分析又分为硬分析(Hard Parse)和软分析(Soft Pars ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号