Hallo,
ich möchte für eine Art Hex-Editor Zeichen (einzelne Bytes) auch in ASCII darstellen. Nun sind die normalen Formate wie UTF-8 usw. dafür nicht geeignet, da diese zeichen grösser 127 nicht oder nur teilweise darstellen können.
Ich hab mich noch an die alten DOS-Programme erinnert und hab dann auf die Erweiterte ASCII-Tabelle mit Codepage "IBM850" gefunden, welche auf von Java 8 unterstützt wird:
https://docs.oracle.com/javase/8/docs/technotes/guides/intl/encoding.doc.html
Mit einer mit dieser Code Page erweiterten ASCII - Tabelle lässt sich dann jeder Bytewert von 0-255 mit einem Zeichen darstellen. Es dürfte auch eine andere sein, welche alle Bytewerte in Zeichen unterscheiden kann.
Damit hab ich ein bisschen rumprobiert mit folgendem Code:
Das programm kopiert in einen ByteBuffer alle 256 Zeichen und wandelt diese dann laut dem Charset mit decode() in einen Charbuf und da gleich in einen string (toString()) um und soll diesen dann ausprinten.
Dabei kommt er bis zum printf(), wirft dann aber eine Exception java.util.UnknownFormatConversionException
Aber der String ss kann ich beim Debuggen vorher noch anschauen. Dieser enthält zwar ab 128 nur noch Vierecke, aber ich kann ihn eben im Debugger sehen. Wieso es dann beim printf() knallt, ist mir ein Rätsel.
Ausserdem hab ich die Zeichen der IBM850er Code Page nicht bekommen, obwohl diese offenbar unterstützt wird.
ich möchte für eine Art Hex-Editor Zeichen (einzelne Bytes) auch in ASCII darstellen. Nun sind die normalen Formate wie UTF-8 usw. dafür nicht geeignet, da diese zeichen grösser 127 nicht oder nur teilweise darstellen können.
Ich hab mich noch an die alten DOS-Programme erinnert und hab dann auf die Erweiterte ASCII-Tabelle mit Codepage "IBM850" gefunden, welche auf von Java 8 unterstützt wird:
https://docs.oracle.com/javase/8/docs/technotes/guides/intl/encoding.doc.html
Mit einer mit dieser Code Page erweiterten ASCII - Tabelle lässt sich dann jeder Bytewert von 0-255 mit einem Zeichen darstellen. Es dürfte auch eine andere sein, welche alle Bytewerte in Zeichen unterscheiden kann.
Damit hab ich ein bisschen rumprobiert mit folgendem Code:
Java:
boolean bo = Charset.isSupported("IBM850");
if (bo) {
Charset cs = Charset.forName("IBM850");
ByteBuffer bb = ByteBuffer.allocate(256);
for (int i = 0; i < 256; i++) {
byte b = (byte)(i+32);
bb.put(i, b);
}
Stringss = cs.decode(bb).toString();
System.out.printf(ss);
}
Dabei kommt er bis zum printf(), wirft dann aber eine Exception java.util.UnknownFormatConversionException
Aber der String ss kann ich beim Debuggen vorher noch anschauen. Dieser enthält zwar ab 128 nur noch Vierecke, aber ich kann ihn eben im Debugger sehen. Wieso es dann beim printf() knallt, ist mir ein Rätsel.
Ausserdem hab ich die Zeichen der IBM850er Code Page nicht bekommen, obwohl diese offenbar unterstützt wird.