程序如下public static void main( String[] args ){
    String c = "新年快乐" ;
    try{
        String cIso = new String( c.getBytes( "gbk" ) , "iso8859-1" ) ;
String cUtf = new String( c.getBytes( "gbk" ) , "utf-8" ) ;
System.out.println( "c:" + c + "  cIso:" + cIso + "  cUtf:" + cUtf ) ;

        String cIsoc = new String( cIso.getBytes( "iso8859-1" ) , "gbk" ) ;
String cUtfc = new String( cUtf.getBytes( "utf-8" ) , "gbk" ) ;
System.out.println( "c:" + c + "  cIsoc:" + cIsoc + "   cUtfc:" + cUtfc ) ;
    }
    catch ( UnsupportedEncodingException e ){
    }
}我运行的结果如下:c:新年快乐  cIso:???ê?ì??  cUtf:???????
c:新年快乐  cIsoc:新年快乐   cUtfc:锟斤拷锟斤拷锟斤拷锟?
注:我本地编译的字符集为  gbk
应该怎么解决,才能让 cUtfc 得到正确的结果?

解决方案 »

  1.   

    你再把utf8还原成iso看看
    顺便接分。
      

  2.   

    从你的例子来看你JVM的默认字符集好象是 iso8859-1
    str.getBytes( encoding1 ) , encoding1)
    这句的意思,是将str从encoding1转换为encoding2
      

  3.   

    本地的jvm 是 gbk ,不是 iso8859-1
    楼上的俺调调啊哇,2个星星啊。。
      

  4.   

    public static void main( String[] args ){
        String c = "新年快乐" ;
        try{
        String cIso = new String( c.getBytes( "iso8859-1" )   ) ;
        String cUtf = new String( c.getBytes( "utf-8"  )  ) ;
        System.out.println( "c:" + c + " cIso:" + cIso + " cUtf:" + cUtf ) ;    String cIsoc = new String( cIso.getBytes( ) ,  "iso8859-1" ) ;
        String cUtfc = new String( cUtf.getBytes(  ) ,"utf-8" ) ;
        //System.out.println(cUtfc);
        System.out.println( "c:" + c + " cIsoc:" + cIsoc + " cUtfc:" + cUtfc ) ;
        }
        catch ( UnsupportedEncodingException e ){
        }
        }
    运行结果:
    c:新年快乐 cIso:???? cUtf:鏂板勾蹇箰
    c:新年快乐 cIsoc:???? cUtfc:新年快乐
    怎么解决?
      

  5.   

    提醒你一下:System.out.println 
    输出的是根据你当前运行环境的默认的编码格式,编码过的,即系统又帮你转了一次
      

  6.   

    我当前的运行环境的编码格式是 gbk 的。楼上的有调出来的程序吗?放个调OK的代码出来啊。。
      

  7.   

    utf-16 好像可以。不知为何?还请高手解答
      

  8.   

    搂主概念有误,请:http://www.regexlab.com/zh/encoding.htm
      

  9.   

    你编译的encoding是8859-1, 而运行的环境是GBK. 因此得到上述结果.不使用编译工具, 直接使用命令行运行, 自己试一试, 看能否得到你要的结果.javac -encoding XXX ...
    java -Dfile.encoding ...
      

  10.   

    javac -encoding XXX ...
    java -Dfile.encoding=XXX ...
      

  11.   

    cmd里,
    javac -encoding XXX ...
    java -Dfile.encoding=XXX ...
    用这2个命令,我都试了。。都不行了。。大家也可以试试奇怪啊。
      

  12.   

    to  vvpang (NullPointerException) 有些字符集相互转换必然会丢失一些信息.
      

  13.   

    /**字符串转化为ASCII*/
    public String ChineseStringToAscii(String s) 
    {
    try 
    {
    CharToByteConverter toByte = CharToByteConverter.getConverter("gb2312");
    byte[] orig = toByte.convertAll(s.toCharArray());
    char[] dest = new char[orig.length];
    for (int i=0;i<orig.length;i++)
    dest[i] = (char)(orig[i] & 0xFF);
    return new String(dest);
    }
    catch (Exception e) 
    {
    System.out.println(e);
    return s;
    }
    }

    /**Unicode转化成GB的源码*/
    public String UnicodetoGB(String s)  
    {  
    StringBuffer  sb  =  new  StringBuffer();  
    boolean  escape  =  false;  
    for(int  i=0;  i<s.length();  i++)  
    {  
    char  c  =  s.charAt(i);  
    switch  (c)  
    {  
    case  '\\': escape = true; break;  
    case  'u':  
    case  'U':  
    if(escape)  
    {  
    try  
    {  
     sb.append((char)Integer.parseInt(s.substring(i+1,i+5),16));  
     escape  =  false;  
    }  
    catch(NumberFormatException e)  
    {  
     throw new IllegalArgumentException();  
    }  
    i += 4;  
    }  
    else  
    {    
    sb.append(c);  
    }  
    break;  
    default:sb.append(c); break;
    }  

    return  sb.toString();  

    /*ASCII转化为字符串*/
    public String AsciiToChineseString(String s) 
    {
    char[] orig = s.toCharArray();
    byte[] dest = new byte[orig.length];
    for (int i=0;i<orig.length;i++)
    dest[i] = (byte)(orig[i]&0xFF);
    try 
    {
    ByteToCharConverter toChar = ByteToCharConverter.getConverter("gb2312");
    return new String(toChar.convertAll(dest));
    }
    catch (Exception e) 
    {
    System.out.println(e);
    return s;
    }
    }
    /**转换编码*/
    public String toGBK(String str)
    {
    try 

    str=new String(str.getBytes("ISO-8859-1"),"GBK"); //using the ISO-8859-1 charset and change to GBK
    }catch (Exception e) {}
    return str;
    } /**UTF8*/
    public String toUtf8String(String src)
    {
    byte[] b = src.getBytes();//using the platform's default charset
    char[] c = new char[b.length];
    for(int i=0;i<b.length;i++)
    {
    c[i] = (char)(b[i]&0x00FF);
    }
    return new String(c);
    } public String toASCII(String str)
    {
    try 

    str=new String(str.getBytes("GBK"),"ISO-8859-1"); //chang str from GBK to ISO
    }catch (Exception e) {}
    return str;
    }
    希望有所帮助............
      

  14.   

    是什么原因呢?我怎么还是不太清楚?
    String s="新年快乐";
    String news=new String(s.getBytes(),"UTF8");
    news=new String(news.getBytes("utf8"),"GBK");为什么news就复远不了了呢?