Zum Inhalt springen

Empfohlene Beiträge

Geschrieben (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 von JesterDay

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...