PoC 중에 SAX 파서를 사용하여 파싱하는 ETL 모듈을 만들고 있는데 IBM MQ의 CCSID 819(ISO-8859-1) 데이터를 받습니다. 이 때 ParserHandler의 chararcters 메소드에 들어오는 character data를 다음과 같이 하면 문자가 가끔 깨져버릴 수 있습니다.

       public void characters(char[] ch, int start, int length) throws SAXException {
// Reading element value
tmpData = new String(ch, start, length);
}

이 때는 CharArrayWriter를 이용하여 저장해야 데이터가 깨지는 것을 막을 수 있습니다.

    private CharArrayWriter contents = new CharArrayWriter();

       public void characters(char[] ch, int start, int length) throws SAXException {
// Reading element value
contents.write(ch, int, length);
}

그리고 CCSID 819(ISO-8859-1) 데이터는를 UTF-8으로 변환하면 한글이 정상적으로 나옵니다.
        public String covert(String data, String sourceSet, String targetSet) {
String result = null;
        try {
       result = new String(data.getBytes(sourceSet),targetSet);
        } catch (UnsupportedEncodingException e) {
       // TODO Auto-generated catch block
       e.printStackTrace();
        }
   return result;
}
크리에이티브 커먼즈 라이센스
Creative Commons License
2009/07/17 15:45 2009/07/17 15:45
http://www.javapattern.info/trackback/277