출처 카페 > 네이버 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 처리방식대로 하시면 되겠습니다.
조금이라도 도움이 되시길 빌며.. 자바 개발자분들 화이팅~! (한글문제는 언제나 짜증이네요;)
'IT > JSP' 카테고리의 다른 글
jstl 태크가 안될 때~ (0) | 2018.12.27 |
---|---|
[공유] 파이어폭스(Firefox)의 캐쉬(Cache) 설정 - JSP개발시 브라우저 캐쉬 끄기 (0) | 2018.12.27 |
[공유] jsp에서 xml파싱은 어떻게 하나요? (0) | 2018.12.27 |
jsp의 el(표현 언어)에서 requestScope와 param의 차이는 무엇인가요? (0) | 2018.12.27 |
[공유] 자바 HttpClient 사용 (0) | 2018.12.27 |