'file.encoding'에 해당되는 글 2

  1. 2009.12.23 XML 파싱 에러
  2. 2009.08.24 한글 인코딩 문제

XML 파싱 에러

무시무시한 XML 파싱 에러가 났다.
Caused by: org.jdom.input.JDOMParseException: Error on line 15: The element type "xxx:TestName" must be terminated by the matching end-tag "</xxx:TestName>".
    at org.jdom.input.SAXBuilder.build(SAXBuilder.java:504)
    at org.jdom.input.SAXBuilder.build(SAXBuilder.java:807)
    ...
    ... 37 more
Caused by: org.xml.sax.SAXParseException: The element type "xxx:PartyName" must be terminated by the matching end-tag "</xxx:TestName>".
    at org.apache.xerces.util.ErrorHandlerWrapper.createSAXParseException(Unknown Source)

시스템이 영문 윈도우즈라 file.encoding을 EUC-KR로 지정해 두었다.
외부시스템과 검증테스트를 하다보니 위와 같은 에러가 남.
개발자와 통화를 하던중 한글이 깨진 경우라고 함.
생성된 MIME 파일을 살펴보니 한글이 깨진 경우가 나왔다.

XXX-20091223162459-72723.0
    <XxxDateTime>20091223162532</XxxDateTime>
    <DescriptionText>성공적으로 처리 되었습니다.</DescriptionText>

XXX-20091223162459-72723.s
      <xxx:To>
        <xxx:TestID>1234512345</xxx:TestID>
        <xxx:TestName>(주)XXX</xxx:TestName>
      </xxx:To>

XXX-20091223162541-07225.s
      <xxx:To>
        <xxx:TestID>1234512345</xxx:TestID>
        <xxx:TestName>(二??대?????ㅽ???/xxx:TestName>
      </xxx:To>

file.encoding을 8859_1, UTF-8로 수정하면 정상적으로 처리된다.
시스템의 페이지 인코딩인 UTF-8로 설정했다.

한글 인코딩 문제

D사 W시스템에서 데이터 조회시 한글이 깨짐
response.setContentType("text/html;charset=euc-kr");
response.getOutputStream().write(CONTENTS.getBytes());

소스는 문자열을 넘겨받아서 위와 같이 출력해주는 형태임.

영문 Windows 환경이고 SunOne 6.1 사용중.
한글처리는 필터에서 처리하고 있음.
file.encoding 시스템 프로퍼티는 Cp1251 임.

여러가지 방법을 써봤는데도 깨짐

해결은 간단하다.
CONTENTS.getBytes("euc-kr")

왜 이걸 처음부터 생각하지 못했지?

[todo] 윈도우즈에서 file.encoding 시스템 프로퍼티는 어디서 가져오나? rt.jar 를 봤는데 native 메서드에서 막혔음.
영문 윈도우이긴 하지만 언어설정이 한글로 되어 있었음.
[todo] 로그도 깨졌는데, 위와 같이 해서 한글이 깨지는지 확인할 필요가 있음.