# Konvertierung von Unicode zu UTF-8



## peter_mueller (15. November 2004)

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");


----------



## schnuffie (15. November 2004)

DataOutputStream hat eine Methode "writeUTF(String s)", die dürfte Dein Problem lösen können.

CU schnuffie


----------



## peter_mueller (15. November 2004)

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


----------



## peter_mueller (20. November 2004)

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


----------



## Thomas Darimont (20. November 2004)

Hallo!

Veruschs mal so:


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


----------



## peter_mueller (20. November 2004)

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:

```
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?

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


----------

