String.getBytes(charset) hat Fehler bei EBCDIC-Zeichensatz
Die String-Konvertierung nach EBCDIC über String.getBytes(charset) unterstützt mindestens ein Falsches Ergebnis. Das Zeichen "a" wird ein 0x3f, sollte aber 0x81.
public static void convert() throws UnsupportedEncodingException {
String data="abcABC";
String ebcdic = "IBM-1047";
String ascii = "ISO-8859-1";
System.out.printf("Charset %s is supported: %s\n", ebcdic, Charset.isSupported(ebcdic));
String result= new String(data.getBytes(ebcdic));
System.out.printf("EBCDIC: %s\n",asHex(result.getBytes()));
System.out.printf("Charset %s is supported: %s\n", ascii, Charset.isSupported(ascii));
result= new String(data.getBytes(ascii));
System.out.printf("ASCII: %s\n",asHex(result.getBytes()));
}
public static String asHex(byte[] buf) {
char[] HEX_CHARS = "0123456789abcdef".toCharArray();
char[] chars = new char[2 * buf.length];
for (int i = 0; i < buf.length; ++i)
{
chars[2 * i] = HEX_CHARS[(buf[i] & 0xF0) >>> 4];
chars[2 * i + 1] = HEX_CHARS[buf[i] & 0x0F];
}
return new String(chars);
}
Das Ergebnis ist:
- Zeichensatz IBM-1047 unterstützt: true
- EBCDIC: 3f8283c1c2c3
- Charset ISO-8859-1 unterstützt: true
- ASCII: 616263414243
Kann ich etwas dagegen tun?
- Bitte fügen Sie entsprechende language-tag.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Beim Aufruf
Die Kodierung der text-in-Daten in EBCDIC-bytes. Dann erstellen Sie eine Zeichenfolge, die aus diesen bytes, als ob Sie standen für einige Zeichenfolge in der Standard-Zeichenkodierung für Ihr system: all dies bewirkt, dass Bruch, weil die bytes nicht zum codieren von gültigen text, der in einer anderen Codierung als der EBCDIC.
Dieses Problem zu beheben, halten bytes als bytes: