2017-01-22 28 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); 
}