IT/JSP

[공유] jsp에서 java.net.URL로 xml 로딩시 한글인코딩 깨짐 문제- 해결법

news-wiki 2018. 12. 27. 22:20
728x90


출처 카페 > 네이버 OpenAPI 공식 .. | backoon

원문 http://cafe.naver.com/openapi/1176

제가 외부 톰캣호스팅을 사용할땐 아래 쭈니님께서 알려주신 방법으로 해서 문제가 없었습니다.


하지만 resin(pro 3.x 최근버젼) 에선 왠지 java.net.URL 을 이용해 xml을 가져오면 한글이 중간중간 깨져버려는


어이없는 사고가(?) 발생하더군요.. 물론 java.net.URL을 이용해 일반 utf-8 웹문서를 가져오는건 전혀 문제가 없었습니다.


 


보니까 스트링을 자꾸 변환해서 바이트로 쪼개서 이리저리 변환하다보니 손실이 생기는거 같더군요..


(예를 들어 new String(a.getByte(), "UTF-8") 이런코드는 별로 좋은코드가 아니라고 생각합니다)


나름 생각해본결과, 어디서 보길 리더를 사용해야 한글이 깨지지 않는다고 들어서 열심히 찾아다녔습니다;


해서, 다음과 같이 하시면 java사용시 xml파일을 java.net.URL을 이용해 가져올 때 한글 깨짐문제가 발생하지 않게됩니다.


 


// url 설정


String szUrl = "http://openapi.naver.com/search?key=&target=kin&sort=sim";

szUrl += ("&query=go");

szUrl += ("&display=5");

szUrl += ("&start=1");



InputStream is = null;

InputStreamReader isr = null;

  

is = new URL(szUrl).openStream();


isr = new InputStreamReader(is, "utf-8");


StringBuffer sb = new StringBuffer(); int c;

while ((c = isr.read()) != -1) {sb.append((char) c);}


isr.close(); is.close();


// 여기까지 xml 문서를 utf-8 형식으로 스트링형태로 sb에 저장하였습니다. sb.toString()으로 출력하면 문제없음이 확인됩니다.


// 이걸 xml document로 파싱하겠습니다.


 


DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();

dbf.setValidating(false);

dbf.setNamespaceAware(true);

DocumentBuilder db = dbf.newDocumentBuilder();

Document xmldoc = db.parse(new InputSource(new StringReader(sb.toString())));


이상입니다. xmldoc에 xml문서를 담는데까지 성공하였고 이후는 xml 처리방식대로 하시면 되겠습니다.


조금이라도 도움이 되시길 빌며.. 자바 개발자분들 화이팅~! (한글문제는 언제나 짜증이네요;)

728x90