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

关于Java从byte[]到String的字符转码问题
我刚才写程序遇到一个问题,可能很菜,希望能得到指点:

我在写一个文本转码程序。中文转码都没有问题,但是遇到空格的时候却输出错误了,就是在输出空格的时候。下面举个例子:

byte[] b=new byte[1];
b[0]=0x20;//空格
String str=new String(b, "UTF-16");
System.out.println(str);

控制台输出却输出了个“口”字。
把这个字符串写到文件里发现写的数据是:EF BF BD
请问这是怎么回事?

------解决方案--------------------
UTF-16是用4个字节保存多字节数据的,所以你只有一个字节,无法转成对应的多字节字符,估计剩余的3个字节会自动补长,得到一个乱码字符
Java code
byte[] b=new byte[1];
b[0]=0x20;//空格
String str=new String(b, "UTF-16");
System.out.println(str);
b = str.getBytes("UTF-16"); //重新获得字符串的字节
System.out.println(b.length); //看看长度是否变了
for (int i=0; i<b.length; i++) { //看看每个字节都是什么
    System.out.printf("%04x\n", b[i]);
}