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 카페에 올린 글입니다.