2011-01-09 11 views
1

Beim Versuch, die Bing-API zum Suchen zu verwenden, erhalte ich Zeichen, die nicht druckbar sind und keine zusätzlichen Informationen enthalten. Das Ziel besteht darin, die XML-Antwort (UTF-8) als eine Textdatei zu speichern, die später analysiert wird.Nicht druckbare Zeichen, die in der XML-Antwort des Servers zurückgegeben werden

Mein Code sieht derzeit so etwas wie folgt aus:

URL url = new URL(queryURL); 

    BufferedReader in = new BufferedReader(new InputStreamReader(url.openStream())); 
    BufferedWriter out = new BufferedWriter(new FileWriter(query+"-"+saveResultAs)); 
    String str = in.readLine(); 
    out.write(str); 

    in.close(); 
    out.close(); 

Wenn ich den Inhalt von ‚str‘ senden Sie es etwas zu trösten wie folgt aussieht:

alt text

und hier ist ein, was die neu erstellte lokale XML-Datei sieht wie folgt aus:

alt text

Was soll ich tun, um den UTF-8-Text zu konvertieren, damit str nicht die zusätzlichen Zeichen enthält?

+1

das ist ein Transcoding-Fehler; benutze einen XML-Parser oder erkenne die Kodierung vor der Dekodierung zu einer Zeichenkette: http://www.w3.org/TR/REC-xml/#sec-guessing Ich nehme an, du brauchst eine Zeichenkette - wenn du nur speichern willst die Datei lokal, lesen und schreiben Bytes. – McDowell

+0

@McDowell Ich habe gelesen und schreiben Bytes direkt in die Datei. Die Verwendung von String war eine selbst auferlegte Einschränkung. Vielen Dank! – Penang

Antwort

2

Wenn Sie wissen im Voraus, die Codierung Sie sollten

BufferedReader in = new BufferedReader(new InputStreamReader(url.openStream(), "UTF-8")); 

Und das gleiche mit dem Schriftsteller ... in Ihrem Beispiel nach der Datei zu schreiben in der Plattform Standard codiert ist, während immer noch sein UTF-8 zu erklären.

Es kann sinnvoll sein, die Codierung aus der XML-Deklaration zu lesen, um Überraschungen zu vermeiden.

Wenn Sie die Daten nur für die spätere Verwendung speichern möchten, ist es ohnehin nicht sinnvoll, sie zu kodieren/zu decodieren. Lies einfach die Bytes und schreibe sie weg. Behalten Sie die Aufgabe, die Codierung für den XML-Parser zu erkennen.

+0

Bereitstellung von InputStreamReader mit der "UTF-8" half mir auf dem richtigen Weg. Vielen Dank! – Penang

1

Der XML-Parser übernimmt die Kodierung/Dekodierung, und die entsprechenden Zeichen werden Ihnen zurückgemeldet (z. B. ein SAX-Parser führt dies über den Methodenrückruf characters()). Alles, was Sie tun müssen, ist dann speichern Sie das in einer geeigneten Datei (vielleicht mit einem geeigneten Byte-Order-Mark?)

+0

Ich werde diesen Vorschlag im Hinterkopf behalten, aber momentan ist es meine Aufgabe nur die Datei lokal zu speichern. Vielen Dank! – Penang

Verwandte Themen