/**
     *  格式化文字编码 
     */
    private String toChinese(String strvalue) throws Exception{         try{ 
          if(strvalue==null) 
            return ""; 
          else{ 
            strvalue = new String(strvalue.getBytes("ISO8859_1"), "GBK"); 
            return strvalue; 
          } 
        }catch(Exception e){ 
          return ""; 
        } 
     }例如:
String s="中文";
System.out.println(toChinese(s));//会成乱码?请问为什么???用这个函数,可以把有中文问题的字符串转换为正常的中文,但是去也会把正常的中文转换为乱码,请问怎样才能不管是不是乱码问题,经过这个函数转换后都成正常的中文。这个函数该怎样改???
谢谢了。

解决方案 »

  1.   

    new String(strvalue.getBytes("ISO8859_1"), "GBK"); 
    两个编码格式不同的,应该不行的吧
      

  2.   

    要看你保存.java文件时的编码格式
      

  3.   

    肯定会乱码了,这个"中文"是GBK码的,你这个方法strvalue.getBytes("ISO8859_1"),  却是要得到它的ISO8859_1码,这样就丢失数据了,因为ISO8859_1和GBK占的位数是不同的,当你在用GBK编成unicode的时候,就会出现乱码了.
      

  4.   

    说错了:strvalue.getBytes("ISO8859_1")不是得到它的ISO8859_1码,而是用ISO8859_1的编码方式得到"中文"的字节数组,
      

  5.   

    /*
     * 字符转化,解决乱码问题*/
    public static String getStrCH(String str){
    try{
    String temp_p = str;
            byte[] temp_t = temp_p.getBytes("ISO8859-1");
            String temp = new String(temp_t);
            return temp;
        }
        catch(Exception e){}
        return null;
    }
    //还原成二进制流,然后再照着你想要得格式转换
      

  6.   

    还能还原吗?好像不可以了吧,ISO8859-1编码所占的是一位,而GBK所占的是两位,当你用方法temp_p.getBytes("ISO8859-1")得到二进制流时,把数据丢失了,数据都丢失了,还怎么还原?
      

  7.   

    请问我是否可以判断一个String是否是乱码??
      

  8.   

    楼主问这个问题,说明概念有不清楚的地方。本人以前给公司同事培训的时候,写过一些非常易懂的说明,也许能够帮你澄清:
    “字节串”“字符串”“编码”
    这些等概念。http://www29.websamba.com/sswater/docs/coding.zipzip 文件中是一个 ppt,里面的内容看上去很少,但是那是一边看我一边给大家讲的,每一句话都可以展开来说的。因此,你需要对每一句话都要读仔细,你将能够对“字节”“字符”“编码”从此不再迷惑。
      

  9.   

    我现在的问题是用javamail来收邮件,收163的邮件不会乱码,但收sohu的邮件会乱码,相同的代码.如果我用上面的代码格式化收到的邮件内容,则163的邮件会乱码,sohu的邮件不会乱码了,所以有此一问了.
    能否给个解决方案.谢谢了!