geloescht_JesterDay Geschrieben 10. Juli 2008 Teilen Geschrieben 10. Juli 2008 (bearbeitet) Hallo, ich versuche einen String mit Umlauten aus UTF-8 (im Beispiel cp1252, wegen Windows Einstellung) nach IBM850 umzuwandeln. Das geht auch, bis auf das kleine ü. Hier mal ein Beispiel damit man das Problem nachvollziehen kann: public static void main(String[] args) throws UnsupportedEncodingException, CharacterCodingException { //*** String test soll neu kodiert werden String test = "aou - äöü"; //*** zuerst der ganz einfache Weg, ein neuer String mit Encoding String enc = new String(test.getBytes("cp1252"), "IBM850"); //*** String ausgeben System.out.println("enc: " + enc); //*** Hier noch die ausgabe der einzelnen Byte-Werte der Characters for ( int i = 0; i < enc.length(); i++) { System.out.print((int)enc.charAt(i) + " - "); } System.out.println(""); //*** Jetzt etwas komplizierter über einen CharsetEncoder CharsetEncoder csEnc = Charset.forName("IBM850").newEncoder(); //*** Umwandeln in einen ByteBuffer ByteBuffer bbuf = csEnc.encode(CharBuffer.wrap(test)); //*** ByteBuffer in einen String umwandeln und ausgeben String s = new String(bbuf.array(), 0, bbuf.limit()); System.out.println("s: " + s); //*** Ausgabe der Byte-Werte for ( int ix = 0; ix < enc.length(); ix++) { //*** Umwandeln von signed Byte zu unsigned Byte (standard Byte(Buffer) = -128 bis 127) int i = bbuf.array()[ix] >= 0 ? bbuf.array()[ix] : 256 + bbuf.array()[ix]; System.out.print( i + " - "); } System.out.println(""); //*** Nochmal Ausgabe mit String-Encoding String newS = new String(bbuf.array(), 0, bbuf.limit(), "IBM850"); System.out.println("newS: " + newS); } Die Ausgabe ist folgende: enc: aou - õ÷³ 97 - 111 - 117 - 32 - 45 - 32 - 245 - 247 - 179 - s: aou - „”? 97 - 111 - 117 - 32 - 45 - 32 - 132 - 148 - 129 - newS: aou - äöü Der erste String sieht ja ok aus, ist er aber nicht. Laut IBM850 Charset Encoder Test muss für ü 129 (0x0081) rauskommen. Auch eine weitere Tabelle von IBM850 bestätigt mir das (auf Papier). Der zweite String ist ok, alles stimmt, bis auf das ü. Die Werte der einzelnen Buchstaben sind korrekt. Der dritte ist wiederum sehr komisch, denn er ist ja wieder der Ausgangsstring (wieder zurückkonvertiert?) Die 129 ist ja soweit ok, nur wenn es ausgegeben wird, auch in einen OutputStream in eine Datei (mit passendem Encoding), steht ein ? (0x003f) da. Also einen Wert den er meint nicht umwandeln zu können. Hat da jemand eine Idee? Bearbeitet 10. Juli 2008 von JesterDay Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
geloescht_JesterDay Geschrieben 10. Juli 2008 Autor Teilen Geschrieben 10. Juli 2008 Also, da der Char Wert ja ansich stimmt, haben wir probiert den einfach direkt zu schreiben, nicht über den String-Umweg. Damit geht es... Werd das morgen entsprechend umbauen. Nur mal zur Info. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.