일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- java
- 파이썬3
- node.js
- mysql
- 자바
- 웹 개발
- 데이터베이스
- Spring
- 스프링 부트
- BCI
- 파이썬
- rabbitmq
- 개발
- JPA
- Spring Boot
- 안드로이드
- db
- 디자인 패턴
- 스프링부트
- HTTP
- 보안
- Python
- bytecode
- 자료구조
- ORM
- django
- python3
- 스프링
- 웹
- 장고
- Today
- Total
semtax의 개발 일지
자바 DocumentBuilder 로 UTF-8 인코딩 된 XML 파싱 하는 법 본문
개요
이번 포스팅에서는, 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);
위 코드를 실행시켜서 파싱하는 경우, 정상적으로 파싱이 되는것을 알 수 있습니다.
'개발 > Java' 카테고리의 다른 글
톰캣 에서는 어떻게 JSESSIONID 를 만드는 것일까? (4) | 2020.05.28 |
---|---|
JPA를 이용해서 RDB에 공간정보 저장하기 (0) | 2020.05.26 |
디자인패턴 공부내용 정리 : 리액터 패턴 (2) | 2020.05.18 |
디자인패턴 공부내용 정리 : 브로커 패턴 (1) | 2020.05.17 |
디자인패턴 공부내용 정리 : 싱글톤 패턴 (0) | 2020.05.16 |