String chinese = "中国";try {
System.out.println(new String(chinese.getBytes("8859_1"),"8859_1"));
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}为什么打印为乱码?

解决方案 »

  1.   

    用UTF-8都可以,为什么8859_1不行呢?编解有什么错误?
      

  2.   

     可能不支持那种格式或者你的代码 是不是哟问题啊
    我不清楚String()中的构造方法了
      

  3.   

    8859_1是什么,不是iso-8859-1吗?
      

  4.   

    写成iso-8859-1,结果一样。还是乱码。iso-8859-1与8859_1都是英文平台下的编码。
    但用iso-8859-1进行编码再用iso-8859-1进行解码,就出现乱码。
      

  5.   


    class Test {
    public static void main(String[] args) {
    try {
    // Java里面的每一个String都是UNICODE编码,而一个汉字是以双字节进行存储
    String chinese = "中国"; // Java 中,String的getBytes()方法就是对特定的UNICODE编码的字符串按照给定的字符集进行编码
    // 根据底层代码可知,若不指定时,会默认取当前系统的编码集若是指定了编码集则会查找是否有指定的编码集,
    // 存在则进行编码,不存在则按照"ISO-8859-1"编码集进行编码
    // (我的是GBK)
    byte[] b1 = chinese.getBytes();
    System.out.println("默认系统编码" + System.getProperty("file.encoding")
    + "转换的字节长度:" + b1.length);
    for (int i = 0; i < b1.length; i++) {
    System.out.println("十进制:" + b1[i] + "\t八位二进制:"
    + conversion(b1[i]));
    }
    System.out.println("================================"); // GB2312
    byte[] b2 = chinese.getBytes("GB2312");
    System.out.println("指定GB2312编码转换的字节长度:" + b2.length);
    for (int i = 0; i < b2.length; i++) {
    System.out.println("十进制:" + b2[i] + "\t八位二进制:"
    + conversion(b2[i]));
    }
    System.out.println("================================"); // UTF-8
    byte[] b3 = chinese.getBytes("UTF-8");
    System.out.println("指定UTF-8编码转换的字节长度:" + b3.length);
    for (int i = 0; i < b3.length; i++) {
    System.out.println("十进制:" + b3[i] + "\t八位二进制:"
    + conversion(b3[i]));
    }
    System.out.println("================================"); // ISO-8859-1
    byte[] b4 = chinese.getBytes("ISO-8859-1");
    System.out.println("指定ISO-8859-1编码转换的字节长度:" + b4.length);
    for (int i = 0; i < b4.length; i++) {
    System.out.println("十进制:" + b4[i] + "\t八位二进制:"
    + conversion(b4[i]));
    }
    System.out.println("================================"); // 单字节字符编码 ISO-8859-1 最简单的编码规则,每一个字节直接作为一个 UNICODE 字符。比如,[0xD6,
    // 0xD0] 这两个字节,通过 iso-8859-1 转化为字符串时,将直接得到 [0x00D6, 0x00D0] 两个
    // UNICODE 字符,即 '中'。
    // 反之,将 UNICODE 字符串通过 iso-8859-1 转化为字节串时,只能正常转化 0~255 范围的字符。
    // 所以下面的操作是不可逆的
    System.out.println(new String(chinese.getBytes("ISO-8859-1"),
    "ISO-8859-1"));
    // 而根据不同字符集的编码规则不一样,所以下面的操作也会产生乱码
    System.out.println(new String(chinese.getBytes("ISO-8859-1"),
    "GB2312"));
    System.out.println(new String(chinese.getBytes("UTF-8"), "GB2312"));
    System.out.println(new String(chinese.getBytes("GBK"), "UTF-8"));
    // 不指定编码取系统编码(测试环境为GBK)时,向其他编码转换也为乱码
    System.out.println(new String(chinese.getBytes(), "UTF-8"));
    // 特殊情况,GB2312编码集为GBK编码集的子集,不会乱码
    System.out.println(new String(chinese.getBytes(), "GB2312"));
    // 与系统字符集相同不会产生乱码
    System.out.println(new String(chinese.getBytes(), "GBK")); } catch (UnsupportedEncodingException e) {
    e.printStackTrace();
    }
    } /**
     * byte/short/char/int型变量转变为八位二进制字符串
     * 
     * @param data
     * @return
     */
    public static String conversion(int data) {
    String s = "";
    int b = 1 << 31;
    for (int i = 0; i < 32; i++) {
    if ((data & b) != 0) {
    s = s + "1";
    } else {
    s = s + "0";
    }
    b = b >>> 1;
    }
    return s.substring(s.length() - 8);
    }}
      

  6.   

    输出结果如下:默认系统编码GBK转换的字节长度:4
    十进制:-42 八位二进制:11010110
    十进制:-48 八位二进制:11010000
    十进制:-71 八位二进制:10111001
    十进制:-6 八位二进制:11111010
    ================================
    指定GB2312编码转换的字节长度:4
    十进制:-42 八位二进制:11010110
    十进制:-48 八位二进制:11010000
    十进制:-71 八位二进制:10111001
    十进制:-6 八位二进制:11111010
    ================================
    指定UTF-8编码转换的字节长度:6
    十进制:-28 八位二进制:11100100
    十进制:-72 八位二进制:10111000
    十进制:-83 八位二进制:10101101
    十进制:-27 八位二进制:11100101
    十进制:-101 八位二进制:10011011
    十进制:-67 八位二进制:10111101
    ================================
    指定ISO-8859-1编码转换的字节长度:2
    十进制:63 八位二进制:00111111
    十进制:63 八位二进制:00111111
    ================================
    ??
    ??
    涓??
    ?й?
    ?й?
    中国
    中国
    根据各字符集的编码表、编码范围及规则进行推算,就能得到
    为什么乱码的原因了~