semtax의 개발 일지

자바 DocumentBuilder 로 UTF-8 인코딩 된 XML 파싱 하는 법 본문

개발/Java

자바 DocumentBuilder 로 UTF-8 인코딩 된 XML 파싱 하는 법

semtax 2020. 5. 22. 22:38
반응형

개요

이번 포스팅에서는, javax.xml.Parsers.DocumentBuilder 에서 UTF-8로 인코딩된 XML 파일을 파싱하는 법에 대해 알아보도록 하겠습니다.

일단 그냥 파싱해보자

먼저 DocumentBuilder 를 이용해서 UTF-8로 인코딩 된 XML 파일을 파싱 해봅시다.

String path = "./example1.xml"
File xmlFile = new File(path);

DocumentBuilderFactory docBuilderFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder docBuilder = docBuilderFactory.newDocumentBuilder();
Document doc = docBuilder.parse(is);

그럼 다음과 같은 에러가 발생하게 됩니다.

[Fatal Error] :1:1: Content is not allowed in prolog. org.xml.sax.SAXParseException; lineNumber: 1; columnNumber: 1; Content is not allowed in prolog. at com.sun.org.apache.xerces.internal.parsers.DOMParser.parse(DOMParser.java:251) at com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderImpl.parse(DocumentBuilderImpl.java:300) at com.kcs.xml.ParseXMLOld.parseUTF8XML(ParseXMLOld.java:34) at com.kcs.xml.ParseXMLOld.main(ParseXMLOld.java:19)

사실, 일반 아스키 코드 범위내에 있는 문자들만 들어있는 경우 파싱에러가 나지 않습니다.

하지만, 가끔가다 Non-Ascii 문자들이 있는 경우 위와 같은 에러가 발생하게 됩니다.

재미있는 것은, 파싱시 주석에 Non-Ascii 문자들이 있는 경우에도 에러가 발생하게 됩니다.

UTF-8로 인코딩해서 파싱하는법

아래 코드와 같이 UTF-8로 인코딩된 XML문서를 파싱할 수 있습니다.

String path = "./example1.xml"

File xmlFile = new File(path);
InputStream inputStream = new FileInputStream(file);
Reader reader = new InputStreamReader(inputStream,"UTF-8");
InputSource is = new InputSource(reader);
is.setEncoding("UTF-8");

DocumentBuilderFactory docBuilderFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder docBuilder = docBuilderFactory.newDocumentBuilder();
Document doc = docBuilder.parse(is);

위 코드를 실행시켜서 파싱하는 경우, 정상적으로 파싱이 되는것을 알 수 있습니다.

반응형
Comments