2017-01-22 30 views
0

我正在讀取從HttpURLConnection傳遞到將傳遞給SAXParser的字符串的流。輸入流中的char無效

的內容是這樣的:

<?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); 
} 

當我嘗試打印到控制檯,我看到

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

(開頭無效字符)的SAXParser沒有處理。

如果我調試,並鼠標懸停在字符串var上方,我看到它正確。

+0

你確定它是UTF-8嗎? – shmosel

回答

0

我猜?byte-order markBufferedReadermark/reset方法可用於檢查並跳過第一個字符,如果它是BOM。

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); 
}