HTTP URLConnection + BufferedReader killt meine Umlaute

Diskutiere URLConnection + BufferedReader killt meine Umlaute im Netzwerkprogrammierung Bereich.
M

Maliko

Moin,

ich hänge immer noch an meinem kleinen Problem mit dem Abrufen einer XML über ne URLConnection. Inzwischen funktioniert alles einwandfrei, sprich ich bekomme die Daten zuverlässig, allerdings killt es mir die Umlaute. Und ich habe nicht die geringste Ahnung warum. Ich habs auch mit verschiedenen Codierungen versucht. Hier mal der Code den ich verwende:

Java:
    private void GetXML(String urlRaw, String filePath) throws MalformedURLException, IOException {
        URL url = new URL(urlRaw);
       
        java.util.Properties systemProperties = System.getProperties();
        systemProperties.setProperty("http.proxyHost","xx.xx.xx.xx");
        systemProperties.setProperty("http.proxyPort","3128");
       
        URLConnection request;
       
        if(url.getProtocol().equals("https")) {
            HttpsURLConnection.setDefaultHostnameVerifier((host, sess) -> "aspserver.topm.de".equals(host));
            request = (HttpsURLConnection)url.openConnection();
        } else {
            request = (HttpURLConnection)url.openConnection();
        }
       
        BufferedWriter sw;
       
        try (BufferedReader sr = new BufferedReader(new InputStreamReader(request.getInputStream(), StandardCharsets.UTF_8))) {
            sw = new BufferedWriter(new FileWriter(new File(filePath)));
            String line;
           
            while ((line = sr.readLine()) != null) {
                sw.write(line);
                sw.newLine();
            }
        }
        sw.close();
    }
Im normalen Editor werden mir die Umlaute dann auch angezeigt, aber sowohl Notepad++, als auch Egde als auch die Software welche die XML dann verwendet haben Umlautfehler. Wenn ich versuche das ganze so wie es in der XML auch steht auf ISO_8859_1 zu encoden, dann sehen die Umlaute sogar noch kaputter aus als sonst. Hier auch noch mal die XML die ich raus bekomme:

XML:
<?xml version="1.0" encoding="ISO-8859-1"?>
<Daten>
        <Result>
                <Funktion>API-ABRECHNUNG1</Funktion>
                <Zeitpunkt>Fr 13.03.2020 09:23:54.037</Zeitpunkt>
                <Code>00</Code>
                <Text>OK</Text>
        </Result>
        <Abrechnung1>
                <Adressnummer>50047</Adressnummer>
                <Name>AOK  Baden-Württemberg</Name>
                <Abrechnung>
                        <Beleg>000013-453433</Beleg>
                        <Rechnungsnummer>970121</Rechnungsnummer>
                        <Datum>20.02.2002</Datum>
                        <Status>0</Status>
                        <Summe>76.37</Summe>
                </Abrechnung>
        </Abrechnung1>
        <Abrechnung1>
                <Adressnummer>50048</Adressnummer>
                <Name>Techniker-Krankenkasse</Name>
        </Abrechnung1>
        <Abrechnung1>
                <Adressnummer>50049</Adressnummer>
                <Name>Abrechnungsstelle Bobingen</Name>
                <Abrechnung>
                        <Beleg>000006-52CD3F</Beleg>
                        <Rechnungsnummer>970063</Rechnungsnummer>
                        <Datum>18.06.2004</Datum>
                        <Status>0</Status>
                        <Summe>90.09</Summe>
                </Abrechnung>
                <Abrechnung>
                        <Beleg>000011-51BA34</Beleg>
                        <Rechnungsnummer>970080</Rechnungsnummer>
                        <Datum>20.02.2002</Datum>
                        <Status>0</Status>
                        <Summe>68.77</Summe>
                </Abrechnung>
        </Abrechnung1>
</Daten>
Wenn ich aus das Encoding ISO_8859_1 verwende, sieht der Umlaut so aus: "AOK Baden-Württemberg". Hat vielleicht irgendjemand eine Idee wie ich das Encoding richtig machen muss, bzw. wo ich vergessen habe das Encoding einzustellen? Aus den Tipps von Google bin ich leider nicht wirklich schlau geworden, weil die haben auch alle nur das Encoding im Buffer gemacht.

Danke euch schon einmal im Voraus.
 
J

JustNobody

Also nur als Verständnis: Du hast schon probiert, dass Du an der Stelle:
new InputStreamReader(request.getInputStream(), StandardCharsets.UTF_8)
das Encoding auf ISO-8859-1 gesetzt hast?

Das wäre als erstes zu machen, denn so wie ich das sehe liefert der Server ja eben genau in diesem Encoding Informationen zurück.

Dann solltest Du die Daten ggf. auch in diesem Format schreiben. Das Problem ist aus meiner Sicht, dass der "normale" Editor das Encoding der Datei ignoriert. Der liest einfach und schaut, dass er es irgendwie anzeigt. Das machen andere Editoren wie notepad++ besser.

Also könntest Du die Datei auch in dem entsprechenden Format schreiben über einen OutputStreamWriter, dem Du das Format dann auch mitgibst.

Dann solltest Du nach meinem Verständnis relativ sicher sein.
 
M

Maliko

Jap ganz genau. Wenn ich new InputStreamReader(request.getInputStream(), StandardCharsets.UTF_8) durch new InputStreamReader(request.getInputStream(), StandardCharsets.ISO-8859-1 ) ersetze, bekomme ich den Umlaut wie er im letzten Absatz beschrieben ist.

Das mit dem StreamWriter probiere ich aber mal aus.
 
J

JustNobody

Evtl. kannst Du auch einmal ausprobieren, beim Start noch ein -dfile.encoding=ISO-8859-1 mit zu geben. Aber wenn das nicht geht, dann wäre meine Vermutung, dass der Server nicht das zurückliefert, was er im Encoding selbst sagt. Zumindest gehen mir da die Ideen etwas aus :)
 
M

Maliko

Es scheint tatsächlich an der XML selbst zu liegen. Ich hab grad mal dem StreamWriter ein Encoding mitgegeben, dass hat aber auch nichts gebracht. Nachdem ich jetzt aber stumpf in der XML selbst das Encoding in UTF-8 geändert habe (einfach in der ersten Zeile ISO-8859-1 durch UTF-8 ersetzt), dann habe ich auch keine Umlautfehler mehr.

Von daher vermute ich mal dass auch wenn in der XML ISO-8859-1 steht, wird das ganze trotzdem UTF-8 encodiert übermittelt.
 
Thema: 

URLConnection + BufferedReader killt meine Umlaute

Passende Stellenanzeigen aus deiner Region:
Anzeige

Neue Themen

Anzeige

Anzeige
Oben