# UTF-8 Codierung



## fahne (5. Apr 2006)

Hallo zusammen,

ich habe das Problem, dass ich einen "Text" aus einem ByteArrayOutputStream lesen soll. Der ByteArrayOutputStream enthält UTF-8-Zeichen, wenn ich den Stream in eine Datei umleite, dann enthält diese auch diese wie gewüncht die UTF-8-Codierung, aber wenn ich den Stream in einen String weiterleite:

```
ByteArrayOutputStream out = new ByteArrayOutputStream();
...
final String mail = new String( out.toByteArray(), "UTF-8" );
```
und den String in eine Datei weiterleite:

```
file.write(mail.getBytes());
```
werden umlaute und ähnliches durch ?? ersetzt.

Das Problem ist, dass ich den String mail auf jedenfall brauche, aber in diesem halt alle Sonderzeichen nicht durch ?? ersetzt.

Ich hoffe dass mir hier jemand weiterhelfen kann.

MfG

fahne


----------



## Bleiglanz (5. Apr 2006)

getBytes()

liefert ein Byte-Array im DefaultEncoding deiner Plattform, und das ist nur bei den neueren Linuxen schon UTF-8

welche Plattform hast du denn?

Tipp: schau mal in die API, es gibt ein zweites getBytes...


----------



## fahne (5. Apr 2006)

Hallo,

Das Programm läuft auf zwei Verschiedenen Systemen das Testsystem lüft unter Suse 8.2 welches Leider noch kein UTF-8 unterstützt. Das Profuktivsystem läuft auf Suse Linux Enterprise Server 9, welches definitiv UTF-8 unterstützt und auch Systemstandard ist. Ausgabe von locale:

```
LANG=de_DE.UTF-8
LC_CTYPE="de_DE.UTF-8"
LC_NUMERIC="de_DE.UTF-8"
LC_TIME="de_DE.UTF-8"
LC_COLLATE="de_DE.UTF-8"
LC_MONETARY="de_DE.UTF-8"
LC_MESSAGES="de_DE.UTF-8"
LC_PAPER="de_DE.UTF-8"
LC_NAME="de_DE.UTF-8"
LC_ADDRESS="de_DE.UTF-8"
LC_TELEPHONE="de_DE.UTF-8"
LC_MEASUREMENT="de_DE.UTF-8"
LC_IDENTIFICATION="de_DE.UTF-8"
LC_ALL=
```
Hier funktioniert es aber trotzdem nicht, selbst wenn ich getBytes("UTF-8") benutze.

MfG

fahne


----------



## flanker (5. Apr 2006)

Mit _OutputStreamWriter_ sollte funktionieren:

```
FileOutputStream fos = new FileOutputStream(file);
OutputStreamWriter osw = new OutputStreamWriter(fos, Charset.forName("UTF-8"));
osw.write(str, 0, str.length());
osw.close();
```


----------



## fahne (5. Apr 2006)

Ich werden es am freitag mal ausprobieren, ich bin morgen nicht arbeiten. Aber ich weiß noch nicht, ob es mir weiterhilft, selbst wenn es funtkioniert, weil die datei die ich da erzeuge nur fürs debuggen benutze, ich brauche den UTF-8 Text in einer String Variablen.


----------



## PELLE (7. Apr 2006)

hey dein problem habe ich auch ich lade die txt datei in eine JTextArea Instanz wobei die Sonderzeichen alle falsch dargestellt werden... aber ich denke diese Sache mit dem OutputStreamWriter sollte ich auch probieren. Windows xp sollte ja utf-8 unterstützen nehme ich an... 

würde mich freuen wenn du hier reinschreibst mit deinem code wie du das ganze jetzt gelöst hast;-)


----------



## fahne (7. Apr 2006)

Leider hab ich das Problem noch nicht gelöst, aber wenn ich es schaffe, dann werde ich sie hier posten


----------



## sQuantes (8. Apr 2006)

Hi,
ich habe auch das gleiche Problem mit den Unicode chracters deren Hex-Wert höher ist als 7f.
Die werden alle mit ? ausgegeben.
Ich habe  mir die Ascii und Unicode (Basis -1-Byte- und Extended -2-Byte-) bei www.asciitable.com angeschaut.
Ich versuche mal, mein Problem und mögliche Diagnose mit einem Beispiel erklären:
Das Zeichen mit Hex-Code "0x8c" hat den Dezimalwert  140, wobei 0x8c (und somit der Dezimalwert davon 140) in Unicode nicht mehr existiert. 
Das gleiche Zeichen wird in Unicode extended Tabelle mit dem Wert 0x152 angegeben. Dann wird in java auch das richtige Zeichen ausgegeben. Unicode geht ja nur bis 7f, ab 7f muss eine Konvertierung stattfinden (von 1-Byte Unicode zu 2-Byte Unicode extended). Und wie dies geschieht, weiss ich nicht und würde gerne wissen.
Also wie kommt man von von 0x8c Unicode zu 0x152 Unicode extended Chracter code?
Gibt es eine Formel dafür?

MfG
sQ


----------

