블로그 이미지
좋은느낌/원철
이것저것 필요한 것을 모아보렵니다.. 방문해 주셔서 감사합니다..

calendar

1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30

Notice

    2009. 2. 24. 17:00 개발/JSP/Servlet

    출처 : http://www.potatosoft.com/tt/218

    Java 를 기반으로 구현된 모든 코드에서 국제화 등을 이유로 리소스 파일 작성을 할때에, 문자열 등의 리소스 파일은 ascii 값의 ISO-8859-1 인코딩으로 작성해 주어야 합니다.

    프로퍼티 파일들을 UTF-8 로 읽어주도록 변경되면 좋겠지만 어쨌든 현재는 그렇습니다.

    이 때문에 jdk 에는 native2ascii 라는 실행파일이 들어 있는데( $JAVA_HOME/bin 에 들어있음 ) 이놈을 이용해서 프로퍼티 파일을 파라메터로 건내주거나 파일 실행 후 문자열을 입력해보면 Latin-1 인코딩의 ascii 값을 알 수 있습니다.

    ANT에서도 native2ascii task 를 지원하기 때문에 일반적으로 컴파일 및 빌드 과정과는 별개로 native2ascii 를 이용해서 리소스 파일들을 바꾸어 주는 작업을 추가하게 됩니다.

    Quick and Dirty Hack for UTF-8 Support in ResourceBundle 라는 포스팅을 보면 PropertyResourceBundle 의 wrapper class 구현이 있는데 이런 걸 이용하는 것이 편하긴 합니다. 다만 해당 포스팅의 아래쪽 comment 를 보면 3가지 정도의 bug case 에 대한 지적이 있는데 특히 Brian 이 지적한 내용은 반드시 적용해서 사용하셔야겠습니다.

    Very cool however I found a bug in your impl. when asking for a resource bundle with a parent. This is how I fixed it. Notice the call to getString which makes sure to recursively go over the parent bundles. Also checking for null.

    protected Object handleGetObject(String key) {
        String value = (String)bundle.getString(key);
        if (value==null) return null;
        try {
            return new String (value.getBytes("ISO-8859-1"),"UTF-8") ;
        } catch (UnsupportedEncodingException e) {
        // Shouldn't fail - but should we still add logging message?
        return null;
        }
    }

    And another small thing: not all ISO-8859-1 chars are a subset of UTF-8. The (C) sign seems to clash. If I put a \u00a9 in a UTF-8 file, it fails. But if I put the actual sign, it works. For some reason it is encoded as two bytes even though it is below 192 decimal.

    Not a big deal though. Still very cool solution.

    첫번째 지적한 경우에 해당하는 문자는 저작권 표시와 유로화 표시, 그리고 무한대 표시 등이 있는 것 같네요.


    이런 프로그래밍적인 것 말고 이클립스 플러그인 형태의 '편집기'를 원하는 분이라면 Properties Editor 라는 것을 추천합니다.

    이클립스의 Help -> software updates -> add site 를 선택하고 http://propedit.sourceforge.jp/eclipse/updates/ 를 추가해서 업데이트를 하면 됩니다.

    설치를 하고 나서 파일을 생성할때 확장자를 .properties 로 설정하면 해당 파일을 편집할때 자동으로 이 Properties Editor 를 이용해서 편집이 되고 properties 파일의 아이콘도 에디터 설치 후에는 아래와 같이 녹색 P 모양으로 바뀌게 됩니다.

    image

    물론 파일을 선택하고 팝업메뉴를 띄워서 Open with... 로 파일을 열 수도 있습니다.

    package.properties 파일을 열어보면 이렇게 이쁘게 한글로 표시가 되어 있습니다...만...

    image

    Open with 를 선택하고 일반 텍스트 편집기로 열어보면

    image

    native2ascii 를 돌린 것처럼 이쁘게 변환되어 있습니다. 전체 프로젝트의 인코딩이 UTF-8로 지정되어 있어도 해당 .properties 파일은 ISO-8859-1 로 맞춰지기 때문에 별도로 파일 인코딩을 바꾸어주지 않아도 되니 편리하군요.

    posted by 좋은느낌/원철