日期:2014-05-20  浏览次数:20775 次

java中 unicode编码问题

char ch = '我';
System.out.println(ch+"   "+ch.SIZE+"   "+String.valueOf(ch).getBytes("UNICODE").length+"   UNICODE");

结果:我   16   4   UNICODE
.java 文件用的是UTF-8编码,UTF-8是Unicode的其中一个使用方式,
查资料,Unicode 有 2个字节  ,还有一个扩展的4字节 字符集,
 '我'  的 unicode  16进制编码为  \u4e2d  ,是2个字节,通过 UTF-8 编码  是  3个字节,这些都能理解

问题:通过如上的代码,显示  ‘我’   unicode编码占用  4个字节,这是为什么?如果占用4个字节,一个char(2个字节)怎么能存放的下这个4字节的中文字符呢?
------解决方案--------------------
引用:

char ch = '我';
System.out.println(ch+"   "+ch.SIZE+"   "+String.valueOf(ch).getBytes("UNICODE").length+"   UNICODE");

结果:我   16   4   UNICODE
.java 文件用的是UTF-8编码,UTF-8是Unicode的其中一个使用方式,
查资料,Unicode 有 2个字节  ,还有一个扩展的4字节 字符集,
 '我'  的 unicode  16进制编码为  \u4e2d  ,是2个字节,通过 UTF-8 编码  是  3个字节,这些都能理解

问题:通过如上的代码,显示  ‘我’   unicode编码占用  4个字节,这是为什么?如果占用4个字节,一个char(2个字节)怎么能存放的下这个4字节的中文字符呢?

你查看下API就清楚了;
再有是了解下UTF-16编码的规则,如BE和LE的区别;

也可测试下:前面的两个字节其实是FE FF,表示高字节在前;