BOM 머리 잘라 야 돼.

1762 단어 bom
demo4j 가 XML 을 분석 할 때 XML 에서 bom 헤드 가 발생 하면 엉뚱 한 오 류 를 보고 하고 아래 에 해결 방안 을 붙 입 니 다.
텍스트 파일 의 헤더 표시:
 
 
   
00 00 FE FF
UTF-32, big-endian
FF FE 00 00
UTF-32, little-endian
FE FF
UTF-16, big-endian
FF FE
UTF-16, little-endian
EF BB BF
UTF-8
 
SAX 분석 에서 Content is not allowed in prolog. 이상 해결 방법:
public Reader getReader(InputStream is) throws IOException,
   UnsupportedEncodingException {
  PushbackInputStream pis = new PushbackInputStream(is, 1024);
  String bomEncoding = getBOMEncoding(pis);
  System.out.println(bomEncoding);
  Reader input = null;
  if (bomEncoding == null) {
   input = new BufferedReader(new InputStreamReader(pis, "UTF8"));
  }
  else {
   input = new BufferedReader(new InputStreamReader(pis, bomEncoding));
  }
  return input;
 }

 protected String getBOMEncoding(PushbackInputStream is) throws IOException {
  String encoding = null;
  int[] bytes = new int[3];
  bytes[0] = is.read();
  bytes[1] = is.read();
  bytes[2] = is.read();
  if (bytes[0] == 0xFE && bytes[1] == 0xFF) {
   encoding = "UTF_16BE";
   is.unread(bytes[2]);
  }
  else if (bytes[0] == 0xFF && bytes[1] == 0xFE) {
   encoding = "UTF_16LE";
   is.unread(bytes[2]);
  }
  else if (bytes[0] == 0xEF && bytes[1] == 0xBB && bytes[2] == 0xBF) {
   encoding = "UTF8";
  }
  else {
   for (int i = bytes.length - 1; i >= 0; i--) {
    is.unread(bytes[i]);
   }
  }
  return encoding;
 }

좋은 웹페이지 즐겨찾기