byte[] srtbyte = {0,1,2,3,4,5};
String s1=new String(srtbyte);
syso(s1);
结果出现乱码。这是什么原因?
看了一些网上相关的大部分都是中文编码问题,与我这问题还是有不同。
2.如果byte数组的值是字符数组。转String就没问题了
这是为什么

解决方案 »

  1.   

    你传入的byte数组必须可以转化成相应的字符才可以,不是随便的byte都可以转化成字符的。比如byte[] chars = {100,99,98,97}; //输出 dcba
      

  2.   

    因为你的byte数组对应的字符转换成String后不是正常字符,自然是乱码。
      

  3.   

    1.可以定义编码方式使下
    String res = new String(srtbyte,"UTF-8");
    2.可以使用ToString()进行转换
      

  4.   

    我擦嘞,亲,你确定你的代码是报乱码吗,我测试后发现压根不报错不乱码不继续执行,
    比特数组,字符数组都支持,只不过你传入的比特数组初始化的时候不对
    byte[] srtbyte = {0,1,2,3,4,5};
         System.out.println(srtbyte[0]);
         String s1 = new String(srtbyte);
         System.out.println(s1);
    按照注释掉的方式传就可以了
      

  5.   

    可以看看源码,他走的是decode方法,你的数据找不到对应的码值所以就出现乱码
      

  6.   

    byte[] srtbyte = {0,1,2,3,4,5};
    String s1=new String(srtbyte);//在这个构造函数中是通过使用平台的默认字符集解码指定的字节数组,可以使用String(byte[] bytes, Charset charset) 通过指定字符集对字节数组解码
    syso(s1);
    你也可将程序更改为:
    byte[] srtbyte = {0,1,2,3,4,5};
    String s1="";
    for(int i=0;i<srtbyte.length;i++){
    s1+=srtbyte[i];
    }
    System.out.println(s1);
    来实现
      

  7.   

    本质原因还没有理解。但是确实是如果byte数组中存储的是95,96那些数据打印的是对应的char值。至于编码,我的这个简单的小Test与之无关。放下代码可以去测试下。
    public class A {
    public static void main(String[] args) throws UnsupportedEncodingException {//这个是我当时使用String带编码时throws的异常,
    byte b='0';
    System.out.println(b);//48
    byte []b2=new byte[]{0,1,2,99,100};
    String s1=new String(b2);

    System.out.println(s1);//乱码
    }
    }
      

  8.   

    因为Java的字符是Unicode编码的,一个字符等于两个字节,你把一个字节数组传进去他不认识,你可以与0xf,他就认识。
      

  9.   

    电脑存储的是编码,但编码如何映射成文字,也就是 ASCII 字符集,是人为制定的固定标准。就比如你的身份编号是 97,而你的名字是 'a'。电脑里储存的是你的编号 97,展示给用户看的是 'a',你的编号和 97 和你名字 'a' 唯一且永久性的关联起来。即 new String(new byte[]{ 97 }) 显示出来就是字符串 "a"。由于编码 0~5 对应的字符是不可见字符,显示出来是乱码。在 Linux 上使用 byte[] 来构造 String 是默认是 UTF-8 编码,刚好和 ANSI 标准的数字和英文部分是一致的。