ResourceBundle을 이용할 때 읽어들일 properties 파일은 ISO-8859-1 로 encoding된 파일어야 한다.

그런데 이건 저~으기 영어권 국가들에게나 해당되고 나머지 수십억 명의 지구인들은 모두  한자, 히라가나, 카나카나,터키어, 한글 등등 각 나라의 문자를 non-Latin1, non-Unicode encoding 시스템을 통해 저장한다.(말이 좀 이상한가? )

아무튼 한국의 경우 KSC5601, EUC-KR, MS949 등등의 시스템을 사용하는데 이렇게 저장된 properties 파일을 ResourceBundle로 읽어들일 경우 무참히 문자가 깨지는 바, Latin1이 아닌 문자들은 유니코드 값으로 변환해주어야 한다.

이를 위해서 native2ascii.exe 라는 Tool 이 JDK 안에 포함되어 있다.(JAVAHOME/bin)

이 툴을 이용하는 원초적 방식은 시커먼 cmd 창을 띄워서 주저리주저리 변환할 파일의 디렉토리 구조를 모두 넣어주어야 하거나 bat 파일을 만드는 것. (오마이갓 -_-;;)

다른 방식은 이클립스를 사용할 경우 플러그인을 따로 설치해서 해결을 보는 방법.

마지막으로 ant 를 사용한다면 관련 task가 있다고 "들었다"(써본적은 없고..)

플러그인 새로 설치하기는 귀찮고(호환 안될까봐... 3.5라서.. -_-;) ant는 잘 써보질 못했고...

해서 External Tool 로 등록하면 되지 않을가 싶어서 한시간동안 이것저것 건드려서 설정했다는거.. -_-v

우선 Run > External Tools > External Tools configuration... 을 누르면 아래와 같이 외부 tool을 등록하는 화면이 짠~ 나타난다.

왼쪽 귀퉁이에 아이콘을 눌르면 오른쪽에 설정창이 뜬다.


이제 저기에 native2ascii 를 등록해서 간단하게 버튼만 눌러서 사용하고자 한다. 위에서 New.. 아이콘을 누르면 아래와같은 등록창이 나타난다.


Name 에 알맞은 이름을 적어주고 Location에는 native2ascii.exe의 full path를 입력한다. JAVA_HOME 시스템 변수를 이용하면 편한데 방법을 모르겠다 -_-;;

그리고 Arguments 부분에 아래의 문자열을 붙여넣는다.

encoding ${string_prompt:the encoding of ${selected_resource_name}} ${resource_loc} ${file_prompt:${selected_resource_name}}

위 문자열을 해석하면

${string_prompt:the encoding of ${selected_resource_name}}
=> 변환할 파일의 encoding 값을 넣는 프롬프트를 띄운다.(밑에 그림에 나옴)

${resource_loc} => 변환할 파일의 path 정보

${file_prompt:${selected_resource_name}}
 => 변환 후 생성될 파일을 저장하는 파일선택창을 보여준다.

그리고 Refresh 탭으로 넘어가서...

완료 후 리소스 갱신에 체크 필수


위와같이 체크를 해야 파일 생성 후 왼쪽의 Package Explorer가 업데이트 된다.

Refresh 체크 안해놓고나서 변환했는데 파일 없다고 성질 부리면 바보~


Build 탭으로 넘어가서...

빌드하고는 상관없는 native2ascii.exe


native2ascii 는 프로젝트 빌드하고는 상관이 없으니까 체크를 해제하는게 좋을 듯.. (체크해도 별 상관은 없음)

이렇게하고 apply를 누르면 native2ascii 를 이클립스에서 사용할 수 있다.



만들었으니 예제로 확인을 해보자.

messages_ko.properties.txt


위와같이 messages_ko.properties.txt 로 파일을 만든 후 간단하게 메세지를 한글로 입력한다. (확장자 properties 로 저장하면 encoding이Latin1 으로 되어서 한글 입력이 안되기 때문에 utf-8이나 euc-kr로 다시 encoding을 변경해줘야 한다. 그러면 파일 확장자만 보고 파일의 encoding 값을 알 수 없어서 변환 전 파일을 txt로 저장했다.)

예제 파일의 encoding값을 확인하는


그리고 txt 파일의 encoding 값을 확인해 놓는다. 나중에 변환할 때 입력해야 한다.

MS949


예제 파일을 highlight 해놓고 위에서 만든 Native 2 Ascii 명령을 실행해본다.

아까 그 창을 다시


엉뚱한 파일(java 소스파일 등)을 선택해도 실행되므로 txt 파일이 선택됐는지 확인해야 한다.

run 클릭!


위에서 Run 을 누른다.

위에서 확인한 ms949 누름


변환할 messages_ko.properties.txt의 encoding 값을 입력후 OK를 누른다. 빨간줄로 표시했듯이 대상 파일을 다시 한번 확인해준다.

"열기(O)" 이지만 실제 기능은 저장이다.


저장할 디렉토리를 찾아간 후 생성될 파일명을 적어주고 "열기"버튼을 클릭.(열기인데 저장됨 ㅋㅋ). 여기서는 당연히 properties 로 바꿔서 저장해야 ResourceBundle에서 인식한다.


위에서 보면 messages_ko.properties 파일이 생성되었다. 클릭해서 열어보면 유니코드 문자로 변환되었다.

[환경정보]
OS : WindowXP SP3
Eclipse 3.5 Galileo
JDK : sun jdk 1.6.0_16

Posted by yeori
,