# Codierung der strings umändern



## Paddy. (11. Apr 2010)

Ich hab beim erstellen bei anzeige meiner Strings folgendes Problem: Ã¶ wird statt ö und Ã¼ statt ü etc. angezeigt. Also ist die Kodierung der strings Falsch kann man diese ändern?


----------



## Wortraum (11. Apr 2010)

Nein, Strings sind in Java intern immer UTF-16-kodiert. Ohne genauere Angaben kann man nicht sagen, wo der Fehler liegt. Es könnte beim Einlesen geschehen sein, beim Konvertieren, beim Ausgeben in der Konsole, beim Anzeigen einer Datei und so weiter.

Nur zwei Beispiele:
1) Du hast einen String als UTF-8 in eine Datei geschrieben, der Editor interpretiert sie aber als ISO-8859-1 oder CP1252.
2) Der Java-Quelltext ist in UTF-8 kodiert, aber Eclipse ist auf ISO-8859-1 oder CP1252 eingestellt. In dem Fall müßtest Du die Zeichenketten allerdings bereits in Eclipse falsch angezeigt bekommen.


----------



## Paddy. (11. Apr 2010)

Ich lade HTML-dateien aus Internet und dazu werden die über ein ByteArrayOutputStream in ein String kopiert. und die werden später umformatiert und über an ein Printjob geschickt.


----------



## Wortraum (11. Apr 2010)

Da fehlen ab immer noch etliche Informationen.  Ist die HTML-Datei in UTF-8 kodiert? Wo siehst Du dann die falschen Zeichen?

Ich vermute mal, irgendwo wird Reader oder Writer geöffnet, ohne daß die Kodierung angegeben wird. In dem Fall nimmt Java die Standardkodierung des Systems, beispielsweise CP1252. Sollte die HTML-Datei aber in UTF-8 kodiert sein, müßte sie natürlich auch als UTF-8 gelesen werden. Oder bei String.getBytes() oder ByteArrayOutputStream.toString() wurde keine Kodierung angegeben, oder die falsche oder einmal die richtige und einmal keine.

Ich kann da natürlich nur mutmaßen. Nur eines ist sicher: UTF-8 wird als ISO-8859-1 oder CP1252 interpretiert.


----------



## Paddy. (11. Apr 2010)

also die internet seiten werden mit der Funktion geladen:

```
private static void downloadFile(URL url, OutputStream os)  throws IllegalStateException, ProtocolException, IOException {
        HttpURLConnection conn = (HttpURLConnection) url.openConnection();
        conn.setRequestMethod("GET");
        conn.connect();
        int responseCode = conn.getResponseCode();
        if (responseCode == HttpURLConnection.HTTP_OK) {
            byte tmp_buffer[] = new byte[10240];
            InputStream is = conn.getInputStream();
            int n;
            while ((n = is.read(tmp_buffer)) > 0) {
                os.write(tmp_buffer, 0, n);
                os.flush();
            }
        } else {
            throw new IllegalStateException("HTTP response: " + responseCode);
        }
    }
```
wie gesagt geht da ein ByteArrayStream rein und die URL


und Ausgabe erfolgt an eine graphics der gnu.jpdf.PDFJob ich hoffe mal das man auch Sonderzeichen machen kann! (Probiere grade verschiedene PDF-Bibs aus )


----------



## Janus (12. Apr 2010)

Wortraum hat gesagt.:


> [...] bei [...] ByteArrayOutputStream.toString() wurde keine Kodierung angegeben [...]



Ich vermute das mal sehr stark als den Übeltäter.


----------



## Paddy. (13. Apr 2010)

```
public static String getInhalt(URL url){
        String temp=null;
        try {
            ByteArrayOutputStream byte1 = new ByteArrayOutputStream();
            byte1 = new ByteArrayOutputStream();
            downloadFile(url, byte1);
            temp=new String(byte1.toByteArray());//,"UTF8"); //hier also was ändern?????
            byte1.close();
        } catch (Exception ex) { }
        return temp;
    }
```

???:L so mache dann daraus nen String, was sollte dann dort anstelle einfügen hab UTF8 nix scheint alles nix zu bringen.


Vermute das aber vielleicht eher ein Problem im der gnu.jpdf Paket ist das die Sonderzeichen nicht richtig anzeigt.
Kennt sich da jemand aus?


----------



## Wortraum (13. Apr 2010)

Probier es doch einfach aus. Der Umweg über ein Byte-Feld ist übrigens nicht notwendig:

```
/* temp=new String(byte1.toByteArray()); */
temp = byte1.toString("UTF-8");
```

Es geht aber natürlich auch mit toByteArray(), wie Du es gemacht hast:

```
temp = new String(byte1.toByteArray(), "UTF-8");
```


----------



## Paddy. (13. Apr 2010)

also hab jetzt ausprobiert. Beide Versionen bringen keine änderung.

Also hab ich maunuel per String eingabe ein Teststring mit äöü eingetippt. => gleich Fehler
:bahnhof: Scheint vielleicht doch was im gnuPDF zu liegen?


----------



## Paddy. (25. Apr 2010)

hab nun mein gewünschtes Ergebnis (mehr oder weniger) mit FOP bekommen.


----------



## Wortraum (25. Apr 2010)

Ich kann mir nicht vorstellen, daß es an Gunjpdf liegt. Aber da Du es nun mit FOP gemacht hast und es funktioniert, ist ja alles bestens.


----------

