ERLEDIGT
NEIN
ANTWORTEN
1
ZUGRIFFE
3768
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
  1. #1
    Nervensache ist offline 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:

    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();
    probiert.

    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)
     

  2. #2
    Avatar von saftmeister
    saftmeister ist offline Nutze den Saft!
    tutorials.de Premium-User
    Registriert seit
    May 2006
    Ort
    There is no place like 127.0.0.1
    Beiträge
    4.573
    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 ;-)

Thema nicht erledigt

Ähnliche Themen

  1. Antworten: 1
    Letzter Beitrag: 29.10.10, 21:46
  2. UTF8 & ISO-8859-1 gemischt
    Von DoRiMaN im Forum PHP
    Antworten: 7
    Letzter Beitrag: 05.11.09, 09:25
  3. convert von iso-8859-1 to utf8
    Von muga im Forum PHP
    Antworten: 2
    Letzter Beitrag: 07.04.09, 11:31
  4. Antworten: 8
    Letzter Beitrag: 12.08.07, 13:54
  5. UTF-8 in ISO-8859-1 konvertieren
    Von lindin im Forum C/C++
    Antworten: 2
    Letzter Beitrag: 20.10.04, 23:07

Stichworte