tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
5
ZUGRIFFE
4456
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    peter_mueller peter_mueller ist offline Mitglied Silber
    Registriert seit
    Aug 2004
    Beiträge
    73
    Hallo zusammen,

    kann mir zufällig jemand sagen, wie ich Unicode-Text aus einem Swing-TextPane (meines Wissens verwendet das zugrunde liegende Document-Interface da standardmäßig unicode) in UTF-8 konvertiert?
    Die folgenden Codezeilen haben leider nicht den erwünschten Effekt - Sonderzeichen wie ä,ö,ü,ß werden alle mittels Fragezeichen dargestellt.

    Vielen Dank für eure Hilfe,

    Peter

    String text = "text aus swing-textPane";
    byte[] byte_array = text.getBytes();
    ByteArrayOutputStream out = new ByteArrayOutputStream();
    out.write(byte_array);
    text = out.toString("UTF-8");
     

  2. #2
    Avatar von schnuffie
    schnuffie schnuffie ist offline Mitglied Platin
    Registriert seit
    Oct 2004
    Ort
    Ober-Roden (Hessen)
    Beiträge
    725
    DataOutputStream hat eine Methode "writeUTF(String s)", die dürfte Dein Problem lösen können.

    CU schnuffie
     

  3. #3
    peter_mueller peter_mueller ist offline Mitglied Silber
    Registriert seit
    Aug 2004
    Beiträge
    73
    Hi schnuffie,

    Vielen Dank für die schnelle Antwort, aber leider haut es auch mit dem folgenden Code immer noch nicht hin.

    ByteArrayOutputStream out = new ByteArrayOutputStream();
    DataOutputStream dataOut = new DataOutputStream(out);
    dataOut.writeUTF(text_input);
    String text = out.toString("UTF-8");

    Die XML-Datenbank, die ich benutze (eXist --> erwartet UTF-8), beschwert sich weiterhin mit der Fehlermeldung "Invalid byte 2 of 3-byte UTF-8 sequence", immer wenn ich versuche, Sonderzeichen zu speichern.

    Habe ich etwas falsch gemacht?

    Außerdem werden irgendwie zwei unidentifizierbare Zeichen am Anfang hinzugefügt, die ich dann zwar mit
    new String(oldString.substring...)
    weggelesen habe, für deren Auftreten ich aber gar keine Erklärung habe. Du vielleicht?

    Grüße, Peter
    Geändert von peter_mueller (16.11.04 um 10:22 Uhr)
     

  4. #4
    peter_mueller peter_mueller ist offline Mitglied Silber
    Registriert seit
    Aug 2004
    Beiträge
    73
    Hallo zusammen!

    Hat wirklich keiner eine Idee, was ich falsch gemacht habe Ich hänge total an dieser Stelle und wäre für Hilfe seeeeeehr dankbar

    Peter
     

  5. #5
    Registriert seit
    Jun 2002
    Ort
    Saarbrücken (Saarland)
    Beiträge
    9.886
    Blog-Einträge
    29
    Hallo!

    Veruschs mal so:

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    
    package de.tutorials;
     
    import java.awt.BorderLayout;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.io.ByteArrayOutputStream;
    import java.io.IOException;
    import java.io.UnsupportedEncodingException;
     
    import javax.swing.JButton;
    import javax.swing.JFrame;
    import javax.swing.JScrollPane;
    import javax.swing.JTextPane;
     
    public class Unicode2UTF_8 extends JFrame {
     
        private JTextPane pane;
     
        private JButton btnConvert;
     
        public Unicode2UTF_8() {
            super("Unicode2UTF_8");
            setDefaultCloseOperation(EXIT_ON_CLOSE);
            pane = new JTextPane();
            btnConvert = new JButton("Convert");
     
            btnConvert.addActionListener(new ActionListener() {
     
                public void actionPerformed(ActionEvent e) {
                    String str = pane.getText();
                    try {
                        byte[] bytes = str.getBytes("UTF-8");
                        ByteArrayOutputStream baos = new ByteArrayOutputStream();
                        baos.write(bytes);
                        String s = new String(baos.toByteArray(), "UTF-8");
                        System.out.println(s);
     
                    } catch (UnsupportedEncodingException e1) {
                        // TODO Auto-generated catch block
                        e1.printStackTrace();
                    } catch (IOException e2) {
                        // TODO Auto-generated catch block
                        e2.printStackTrace();
                    }
                }
            });
     
            getContentPane().add(new JScrollPane(pane), BorderLayout.NORTH);
            getContentPane().add(btnConvert, BorderLayout.SOUTH);
     
            pack();
            setVisible(true);
        }
     
        public static void main(String[] args) {
            new Unicode2UTF_8();
        }
    }

    Gruß Tom
     
    Java rocks!
    How to become a good Java Programmer?
    Does IT in Java and .Net
    The only valid measurement of code quality: WTFs / minute
    Blog
    Xing
    Twitter

  6. #6
    peter_mueller peter_mueller ist offline Mitglied Silber
    Registriert seit
    Aug 2004
    Beiträge
    73
    Hallo Tom!

    Vielen Dank für deine Hilfe erstmal! Funktioniert hat es nur leider auch nicht, wobei ich gerade rausgefunden habe, dass offenbar innerhalb der TextPane gar nicht unicode verwendet wird, sondern Cp1252.

    Dafür habe ich folgenden Code benutzt:
    Code :
    1
    2
    3
    4
    
    ByteArrayOutputStream baos = new ByteArrayOutputStream();
    OutputStreamWriter out = new OutputStreamWriter(baos);
    out.write(input_string); 
    String encoding = out.getEncoding();
    Nun habe ich drei - vielleicht dumme - Fragen:

    1) Wie ist es möglich, dass nicht unicode verwendet wurde, obwohl in der Sun-Doku über Documents (die ja in JTextPanes verwendet werden) steht:
    "To support internationalization, the Swing text model uses unicode characters..." ?

    2) Kann ich irgendwie den Schriftsatz im JTextPane festlegen?

    3) Warum werden immer noch Sonderzeichen durch '?' ersetzt, wenn ich deinen Code (mit Cp1252) benutze?
    Code :
    1
    2
    3
    4
    5
    
    byte[] bytes = str.getBytes("Cp1252");
    ByteArrayOutputStream baos = new ByteArrayOutputStream();
    baos.write(bytes);
    String s = new String(baos.toByteArray(), "UTF-8");
    System.out.println(s);

    Vielen Dank für jede Hilfe!

    Peter
     

Ähnliche Themen

  1. c#-unicode
    Von adilosch im Forum .NET Archiv
    Antworten: 4
    Letzter Beitrag: 10.01.08, 10:50
  2. Unicode
    Von liquidbeats im Forum PHP
    Antworten: 4
    Letzter Beitrag: 30.04.07, 00:52
  3. Unicode?
    Von Caruso_Nix im Forum Java
    Antworten: 5
    Letzter Beitrag: 11.03.05, 09:25
  4. Unicode oder Unicode nicht
    Von Trivalik im Forum .NET Archiv
    Antworten: 1
    Letzter Beitrag: 09.12.04, 15:02
  5. Konvertierung von String in Double u. Allgmeine Konvertierung
    Von Sephiroth the Second im Forum Visual Basic 6.0
    Antworten: 1
    Letzter Beitrag: 10.04.04, 01:34