2017-01-22 5 views
0

Ich lese einen Stream von einer HttpURLConnection zu einem String, der an einen SAXParser übergeben wird.Ungültiges Zeichen in Eingangsstrom

Der Inhalt wie folgt aussieht:

<?xml version="1.0" encoding="utf-8"?> 

_

BufferedReader br = new BufferedReader(new InputStreamReader(con.getInputStream(), StandardCharsets.UTF_8)); 
StringBuilder sb = new StringBuilder(); 
while ((output = br.readLine()) != null) { 
      sb.append(output); 
} 

Wenn ich versuche, es zu drucken zu trösten, ich sehe

?<?xml version="1.0" encoding="utf-8"?> 

(ungültige Zeichen am Anfang) SAXParser geht damit nicht klar.

Wenn ich debuggen, und über die Zeichenfolge var mit der Maus schweben, sehe ich es richtig.

+0

Sind Sie sicher, dass es in UTF-8 ist? – shmosel

Antwort

0

Ich denke, die ? ist byte-order mark. Die Methode mark/reset von BufferedReader kann verwendet werden, um das erste Zeichen zu prüfen und zu überspringen, wenn es sich um eine Stückliste handelt.

BufferedReader br = new BufferedReader(new InputStreamReader(con.getInputStream(), StandardCharsets.UTF_8)); 
br.mark(256); 
char firstChar = br.read(); 
System.err.println(Integer.toString(firstChar));//for debug 
if (firstChar != 0xFEFF) {//char of BOM 
    br.reset(); 
} 
StringBuilder sb = new StringBuilder(); 
while ((output = br.readLine()) != null) { 
      sb.append(output); 
} 
Verwandte Themen