2016-04-27 4 views
0

In Python kann ich hex um so etwas wie diese konvertieren ..JAVA Hexadezimalstring

s = "6025ce2069c61b15d8314f7cdd76b850dcd339547335d0e4a1e0b9915b0230cd" 

s.decode('hex') 
'`%\xce i\xc6\x1b\x15\xd81O|\xddv\xb8P\xdc\xd39Ts5\xd0\xe4\xa1\xe0\xb9\x91[\x020\xcd' 

Meine Frage ist, wie die gleiche Sache in Java zu tun?

Ich tat dies in Java so, aber es löst eine Ausnahme aus.

new String(Hex.decodeHex(str.toCharArray()), "UTF-8" 

Die Fehlermeldung ist wie folgt.

Exception in thread "main" org.apache.commons.codec.DecoderException: Odd number of characters. 

=========================================== ============

Ich entfernte UTF-8, aber ich bekomme immer noch die gleiche Ausnahme .. bitte helfen! Diese

new String(Hex.decodeHex(combined.toCharArray())) 

Exception in thread "main" org.apache.commons.codec.DecoderException: Odd number of characters. 
+0

Die Fehlermeldung klar genug ist. – Hackerdarshi

+0

Die Hex-Daten, die Sie dort haben, sind * nicht UTF-8-Daten *. Der Python-Code versucht niemals, die Bytes als eine Textkodierung zu interpretieren, alles, was Sie haben, sind noch Bytes. –

+0

@Hackerdarshi so, wie das Gleiche in Java zu tun? – Anderson

Antwort

2

funktioniert für mich

public static void main(String[] args) throws ParseException, DecoderException, UnsupportedEncodingException { 
     String hexString = "6025ce2069c61b15d8314f7cdd76b850dcd339547335d0e4a1e0b9915b0230cd"; 
     byte[] bytes = Hex.decodeHex(hexString.toCharArray()); 
     System.out.println(new String(bytes , "UTF-8")); 
    } 

Ausgabe

`%? i??1O|?v?P??9Ts5???[0? 
+0

Fazit: das OP hat nicht die Daten in 'HexString', dass sie denken, sie haben. –

+0

@MartijnPieters 'hexString.matches (" -? [0-9a-fA-F] + ")' geben Sie true zurück, verweisen Sie [this] (http://stackoverflow.com/questions/11424540/verify-if-string- is-hexadezimal) –

+0

Was hat das damit zu tun, dass das OP keine gerade Zahl von Hexadezimalziffern in seiner Eingabe hat? Und wenn man am Start ein '-' zulässt, wird das alles nur schlimmer, nicht besser. –