2016-04-07 2 views
2

Ich habe ein Problem beim Codieren und Decodieren von Zeichenfolge. Wenn ich String a nach b codiere, dann bedeutet b nach c, dass es gut funktioniert. Wenn ich Finalstring konvertiere, habe ich einige zusätzliche Zeichen. Bitte sehen Sie sich meine Ausgabe für Ihre Erläuterungen an, um am Ende der Ausgabe zusätzliche Zeichen zu erhalten.Codierung und Decodierung Zeichenfolge

Hier ist mein Code.

public class DoubleByteReverse { 

    public static void main(String args[]) { 



     try{      
      String a = new String("基本形"); 

      System.out.println("a value "+a); 

      String b=new String(a.getBytes("Cp939"), "Cp500"); 

      System.out.println("b value "+b); 

      String c=new String(b.getBytes("Cp500"), "Cp939"); 

      System.out.println("c value "+c); 

      String g = new String("ã1áÃã°"); 

      String x = "0x0E"; 
      byte[] bytes = hexStringToByteArray(x); 
      String st = new String(bytes,"Cp500"); 
      //System.out.println(st); 

      String y = "0x0F"; 
      byte[] bytes1 = hexStringToByteArray(y); 
      String en = new String(bytes1,"Cp500"); 
      //System.out.println(en); 


      String finalstring =new String(st+g+en); 

      System.out.println("whole string "+finalstring); 

      String output=new String(finalstring.getBytes("Cp500"),"Cp939"); 

      System.out.println("output "+output); 

       } 
      catch (UnsupportedEncodingException e){} 
     } 


    public static byte[] hexStringToByteArray(String hex) { 
     int l = hex.length(); 
     byte[] data = new byte[l/2]; 
     for (int i = 0; i < l; i += 2) { 
      data[i/2] = (byte) ((Character.digit(hex.charAt(i), 16) << 4) 
           + Character.digit(hex.charAt(i+1), 16)); 
     } 
     return data; 
    } 


} 

Ausgang:

a value 基本形 
b value ã1áÃã° 
c value 基本形 
whole string ã1áÃã° 
output 基本形� 
+0

ändern Kodierung UTF-8. – piyush121

+0

@ piyush121 Ich habe nur mit UTF-8 gespeichert –

+0

Ich denke, die '0x' Präfix auf Ihre Zeichenfolgen' x' und 'y' sollte nicht da sein - die' hexStringToByteArray' versucht, das Präfix auch in ein Byte zu konvertieren. Verwenden Sie einfach '0E' und' 0F' –

Antwort

1

Es scheint, dass das, was Sie in hexStringToByteArray nicht richtig funktioniert, aber wenn Sie den Wert von finalstring für diesen Wert ändern new String("\u000E" + g + "\u000F") es wie erwartet funktioniert. mit

+0

Dank Nicolas funktioniert es gut –

0

Versuche:

Import dieser>import javax.xml.bind.DatatypeConverter; DatatypeConverter.printHexBinary(bytes)