当前位置: 代码迷 >> J2SE >> 关于Java从byte[]到String的字符转码有关问题
  详细解决方案

关于Java从byte[]到String的字符转码有关问题

热度:39   发布时间:2016-04-24 01:57:51.0
关于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]);}