public class ParseTest {
// 字节转换到字符
public static char byte2char(byte b) {
return (char) (b & 0xff);
} public static void main(String[] args) {
byte[] array = { -109, 0, 0, 0 };
char[] code = new char[4];
for (int i = 0; i < code.length; i++) {
code[i] = ParseTest.byte2char(array[i]);
System.out.println(code[i]);
}

}
}代码如上,打印出来是四个小方块乱码
请问怎么解决?谢谢。
注:MyEclipse8.6里该文件的Text file encoding是UTF-8

解决方案 »

  1.   


    把char打印出来是打印字符 
    如果你要打印的char不是可显示的字符 那你希望它不打印成方块乱码还能打印成什么
      

  2.   

    有个问题,byte的-190通过以上方法转成char后再转int是147,是不是147不对应unicode中什么字符所以才显示乱码?
      

  3.   

    可是在我这里输出的结果是?然后就没东西了---------- javar ----------
    -109
    147
    ?
    0
    0输出完成 (耗时 0 秒) - 正常终止
      

  4.   

    应该对应了 C1控制符及拉丁文补充 中的 至于 System.out.println() 能否正常显示这些没有深究过
      

  5.   

    是不是因为Java中char占2个byte?所以这里应该将数组前两位进行解析,后两位进行解析?
      

  6.   

    public static char byte2char(byte b) {
            return (char) (b & 0xff);
        }在上面的函数中,LZ出错了
    你认为b & 0xff得到的结果会是什么?  其实b & 0xff得到的结果就是b自己而已,根本没有达到byte 2 char的效果;  如果是这样还不如直接强转
    我在Eclipse下测试的
      

  7.   

    根据Java语言规范,从byte到char的转换被认为不是一个拓宽原始类型的转换,而是一个拓宽并窄化原始类型的转换(widening and narrowing primitive conversion):byte需要首先转换为int,而这个int又被转换成了char。所以-109会转码为147,显示的就是奇怪的字符。其余三位都是0,转码后不会有输出,楼主可以查一下数字与字符的对应表。至于楼主的写的函数,是没有问题的,如果想将一个byte数值b转型为一个char,并且不希望有符号扩展。这是通用做法。实际上,如果楼主将输入的数组改为   byte[] array = { 97, 98, 99, 100 },就会正确打印期望的a,b,c,d了。不清楚为何楼主要这样用,Java中基本对象的转型规则还是比较多的,特别是涉及有符号和无符号整型拓宽转换的符号扩展行为。
      

  8.   

    -109 根本不在ascii编码内.你能转出来?
      

  9.   

    你把字符转换成该应的AscII码再打印出来
      

  10.   

    好像asc码是65-127,不在范围的话是不能正常显示的,要么是一些符号,要么就是框框疑问号之类的了