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

发表于:2008-10-15 14:46

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:未知    来源:网络转载

#
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数组的每个元素按照十六进制格式打印出来,同样为了方便,我把它作为静态方法。 
21/212>
《2023软件测试行业现状调查报告》独家发布~

精彩评论

  • liaoyin1234
    2008-11-05 18:08:02

    这个地方可以下载JAVA的视频教程,里面讲得很详细哈

    http://www.ibeifeng.com/read-htm-tid-887-fpage-3.html

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号