ERLEDIGT
NEIN
NEIN
ANTWORTEN
1
1
ZUGRIFFE
3017
3017
EMPFEHLEN
-
26.02.10 01:21 #1
Mitglied Silber
- Registriert seit
- Mar 2005
- Beiträge
- 51
Hallo zusammen,
seit Stunden durchsuche ich schon das Netz nach einer Lösung für mein Problem.
Leider bisher absolut erfolglos. Konvertieren von Strings von UTF-8 nach ISO-8859-1
und vice versa ist an sich ja kein Problem. Ein simples utf = new String(latinBytes, "ISO-8859-1")
genügt um den Text umzuwandeln. Alternatv habe ich es auch schon mit:
probiert.Code :1 2 3 4 5 6 7
Charset charset = Charset.forName("ISO-8859-1"); CharsetDecoder decoder = charset.newDecoder(); CharsetEncoder encoder = charset.newEncoder(); ByteBuffer bbuf = encoder.encode(CharBuffer.wrap(s)); CharBuffer cbuf = decoder.decode(bbuf); s = s.toString();
Scheinbar lässt sich das aber nicht problemlos auf Streams übertragen. Mein Problem ist, dass
mir der Client erst im Header verrät welche Kodierung er vornimmt. Standardmäßig setze ich UTF-8 als
Charset für meinen InputStreamReader. Wenn ich jetzt den Text "täst" übertrage wird das leider von Java als
"t?st" ausgegeben. Wenn ich jetzt probiere das mit obigen Codesnippet zu konvertieren, dann gibt
mir Java als Ergebnis "týst" aus.
Die empfangenen Bytes (im Modus UTF-8) sind hierbei:
116, 65533, 115, 116 bzw 74, fffd, 73, 74
Wenn ich den StreamReader mit dem Charset "ISO-8859-1" erzeuge, wird alles wie gewünscht übertragen.
Das Charset während der Kommunikation zu wechseln scheint leider nicht möglich.
Kennt jemand eine Lösung ?
Geändert von Nervensache (26.02.10 um 01:26 Uhr)
-
27.02.10 13:49 #2
Hi,
klingt zwar wie pfusch, aber warum überschreibst du deine Stream-Reader nicht einfach mit einer neuen Instanz?
Also so ungefähr:
Code java:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
/* Ob Client oder Server ist hier ja erstmal egal */ Socket socket = new Socket(); try { InputStreamReader reader = new InputStreamReader(socket.getInputStream()); /* Encoding-Länge müsste spezifiziert werden, oder im Header nach der Charset-Angabe suchen */ char encoding[] = new char[20]; reader.read(encoding, 0, encoding.length); Charset charset = Charset.forName(new String(encoding)); reader = new InputStreamReader(socket.getInputStream(), charset); /* Ab jetzt hast du den Reader inkl. dem gewünschten Client-Encoding */ } catch (IOException e) { System.out.println(e.getMessage()); }
Grüße
--
Qualität des Codes wird in WTF's/Min gemessen: Je mehr, desto schlechter der Code ;-)
Ähnliche Themen
-
simplexml und Zeichensatzdifferenz UTF8 und ISO-8859-1
Von dwex im Forum PHPAntworten: 1Letzter Beitrag: 29.10.10, 21:46 -
UTF8 & ISO-8859-1 gemischt
Von DoRiMaN im Forum PHPAntworten: 7Letzter Beitrag: 05.11.09, 09:25 -
convert von iso-8859-1 to utf8
Von muga im Forum PHPAntworten: 2Letzter Beitrag: 07.04.09, 11:31 -
Charset Konvertierung (utf8, ISO-8859-1)
Von andy72 im Forum PHPAntworten: 8Letzter Beitrag: 12.08.07, 13:54 -
UTF-8 in ISO-8859-1 konvertieren
Von lindin im Forum C/C++Antworten: 2Letzter Beitrag: 20.10.04, 23:07




Zitieren

Login