2016-10-03 4 views
0

Ich benutze diesen Code einen String zu einem Hex-Wert scheintWelchen Zeichensatz zum Konvertieren eines Strings in Hex?

public static String toHex(String arg) throws UnsupportedEncodingException { 
    return String.format("%040x", new BigInteger(1, arg.getBytes(/*YOUR_CHARSET?*/))); 
} 

Der Code zu konvertieren gut zu funktionieren, aber ich verstehe nicht, den Kommentar

/*YOUR_CHARSET?*/ 

Was soll ich dort setzen?

+0

Versucht mit "UTF-8"? –

+1

Wenn Sie es leer lassen, verwendet es den Standard-Zeichensatz Ihres Systems. Sie können es ändern, wenn Sie wollen –

+1

@JornVernee lassen Sie es nicht leer. Der Standard-Zeichensatz Ihrer Plattform kann EBCDIC oder ein anderer Zeichensatz sein, der für die ersten 127 Zeichen nicht mit ASCII identisch ist. –

Antwort

2

Der Code scheint gut zu funktionieren, aber ich verstehe nicht den Kommentar /YOUR_CHARSET? /? Soll ich da hinlegen?

Verfahren String#getBytes() wandelt ein String in eine array of bytes durch der Standard-Zeichensatz der Plattform kodiert. Das Aufrufen von String#getBytes() ist riskant, da es Ihren Code von der Plattform abhängig macht, was später zu Dekodierungsproblemen führen kann, wenn Sie die Plattform wechseln. Daher wird dringend empfohlen, stattdessen String#getBytes(charset) zu verwenden, um den Zielzeichensatz auf diese Weise eindeutig festzulegen richtig, was auch immer die Plattform verwendet unter der Annahme, dass der angegebene Zeichensatz ordnungsgemäß alle Zeichen der String Codierung enthalten kann. In der Tat, wenn Sie beispielsweise Zeichen in Ihrem String akzentuiert haben und Sie einen nicht übereinstimmenden Zeichensatz wie zum Beispiel ASCII verwenden, werden Sie später Decodierungsprobleme bekommen.

0

Sie können entscheiden, aber was auch immer Sie entscheiden, müssen Sie dem Empfänger mitteilen, oder Sie haben bei der Kommunikation gescheitert. Wenn Sie einer Spezifikation folgen, konsultieren Sie diese Spezifikation.

Wahrscheinlich möchten Sie auch eine Codierung für einen Zeichensatz verwenden, der Ihre Daten abdeckt, andernfalls werden einige Zeichen durch Fragezeichen ersetzt. Da der Zeichensatz für Java String Unicode ist, ist die UTF-8-Codierung für Unicode eine naheliegende Wahl.