HTTP URLConnection + BufferedReader killt meine Umlaute

M

Maliko

Bekanntes Mitglied
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.
 
kneitzel

kneitzel

Top Contributor
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

Bekanntes Mitglied
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.
 
kneitzel

kneitzel

Top Contributor
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

Bekanntes Mitglied
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.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
U URLConnection mit lg/pw Netzwerkprogrammierung 2
C Java NIO Urlconnection Filetransfer Netzwerkprogrammierung 14
windl URLConnection unter 1.7 macht Probleme Netzwerkprogrammierung 14
nrg HTTP URLConnection immer neu öffnen? Netzwerkprogrammierung 6
B HTTP JSESSIONID in Http(s)URLConnection loswerden! Netzwerkprogrammierung 13
R HTTP Problem bei Authentifizierung über (Http)UrlConnection Netzwerkprogrammierung 2
H URLConnection - Browseranfrage nachbauen Netzwerkprogrammierung 2
E Parameter einer URLConnection Netzwerkprogrammierung 12
A [URLConnection] Bilder hochladen - aber anders! Netzwerkprogrammierung 4
J URLConnection schließen ? Netzwerkprogrammierung 6
D FTP Über URLConnection Netzwerkprogrammierung 7
R URLConnection via Proxy mit Authentification Netzwerkprogrammierung 5
S URLConnection über Proxy Netzwerkprogrammierung 4
D URLConnection + getLastModified Netzwerkprogrammierung 13
M erst POST dann Http-Request über URLConnection Netzwerkprogrammierung 3
meez Sockettimeout bei URLConnection Netzwerkprogrammierung 2
H Mail über URLConnection Netzwerkprogrammierung 8
x46 byte[] über BufferedReader auslesen Netzwerkprogrammierung 18
X Socket [Anfänger] BufferedReader.readLine() lässt sich Zeit Netzwerkprogrammierung 1
B Socket BufferedReader.readLine() beenden ohne den Stream zu closen Netzwerkprogrammierung 7
C Socket BufferedReader.read(char[] buffer) blockiert unregelmäßig Netzwerkprogrammierung 3
J BufferedReader.ready() wird nicht true Netzwerkprogrammierung 10
A Socket BufferedReader.readLine() blockiert bis ein im Socket OutputStream was gesendet wird ... Netzwerkprogrammierung 9
V Socket BufferedReader interrupten? Netzwerkprogrammierung 10
B Multi-Threaded block bei BufferedReader.readLine() Netzwerkprogrammierung 8
S BufferedReader blockiert zu lange Netzwerkprogrammierung 4
P eine BufferedReader für alles ankommende Netzwerkprogrammierung 2
C 2 BufferedReader als Listener pro Socket (NICHT) möglich? Netzwerkprogrammierung 2
E BufferedReader.ready() immer false Netzwerkprogrammierung 8
R Mittels BufferedReader Objekte lesen? Netzwerkprogrammierung 5
AlClemento Sockets -> BufferedReader Problem Netzwerkprogrammierung 2
C Kollision von ObjectInputStream und BufferedReader ? Netzwerkprogrammierung 6
O BufferedReader.readline kommt nicht zurück Netzwerkprogrammierung 7
F BufferedReader Socket Netzwerkprogrammierung 2
B BufferedReader.readLine() ließt nicht vollständig ! ? Netzwerkprogrammierung 5
J Vom BufferedReader lesen -> hängt ohne Fehler,ohne Except Netzwerkprogrammierung 2

Ähnliche Java Themen


Oben