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

Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren

Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können

Benutzerkonto erstellen

Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!

Neues Benutzerkonto erstellen

Anmelden

Du hast bereits ein Benutzerkonto? Melde Dich hier an.

Jetzt anmelden

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...