관리 메뉴

HeBhy, since 1983.

jsp에서 java.net.URL로 xml 로딩시 utf-8 한글인코딩 깨짐 문제- 해결법 본문

Dev/Web

jsp에서 java.net.URL로 xml 로딩시 utf-8 한글인코딩 깨짐 문제- 해결법

HeBhy 2008. 3. 4. 19:24

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 처리방식대로 하시면 되겠습니다.
자바 개발자분들 화이팅~! (한글문제는 언제나 짜증이네요;)

- 네이버 openapi 카페에 올린 글입니다.

Comments