군대에서 이제 곧 시작하는 훈련을 앞두고 (제작 기간 총 10일, 남은 기한 3일)
컴파일 시 인코딩이 깨지는 문제가 발생했다.!!!
일단 나의 개발 환경은
Os: windows7
IDE: 메모장!
Jdk: 6
Dev: tomcat, cmd
개발 환경이 UTF-8에서만 이루어지는데 한글이 깨지는 이유를 도통 몰라. 해 매이던 중
이건 javac 가 문제일까? 메모장이 문제일까?
javac은 집에서는 잘만 했던 인코딩들( iso-8859-1, EUC-KR, UTF-8, ANSI) 여기서 똑같은 인코딩으로 하는데 안 될 이유가 없다고 생각해서 javac에서 문제가 날 가능성은 없다고 생각했다.
그럼 메모장이 문제 인대 메모장에서 UTF-8, UTF-8(BOM) 환경에서 인코딩을 하면 한글이 안될 이유가 없는데 안 된다. 그럼 euc-kr로 하면 될까?
그 당시 테스트할 수 있는 euc-kr, utf-8 , utf-8(BOM), utf-16, utf-16(BOM) 중에서 한글이 되는 것은 오직 euc-kr 밖에 없다.
인코딩이 문제인가 싶어 자세히 알아본 결과
Java 와 메모장 간의 UTF-8 차이를 발견했다.
메모장은 UTF-8 with BOM 으로 구현이 되었고
java는 UTF-8 without BOM 방식 으로 읽는다.
인코딩이 방식이 달라서 호환이 안되는 건가 싶어서 테스트를 해보았다.
-> (메모장에서 UTF-8 으로 컴파일을 하면 한글이 깨진다고? 정말)
1) UTF-8의경우
테스트 해본 결과
javac complie 자체가 x-windows-949 방식이라 안됐던거다
eclipse , Intellij 같은 IDE 경우에는 자동으로 컴파일을 바꿔주서 이런일이 안 일어나는 것이다. (아닐 때도 있지만.)
컴파일 디폴드 값이 x-windows-949 면 바꿀수 있는 방법도 있겠지
해결 방법은 총 두 가지다.
첫 번째는 컴파일 시 javac -encoding UTF-8 Class.java로 해준다.
두 번째는 메모장 인코딩을 EUC-KR(ANSI)으로 바꿔준다.
만약 군대에서 자바를 할거면 (ㅠ.ㅠ)
컴파일을 해주는 스크립트를 만들어서 하자
파일명은 complie.bat 으로 만들고
내용은 아래같이 넣어주자
cd C:\Users\user\JavaFolder
javac -encoding UTF-8 -d . *.java
cd 는 자바 폴더 경로를 수정해주고
해석)
[ cd ] = cmd 명령어 중 자신의 경로를 오른쪽 해당 경로로 이동한다.
[ javac ]= 컴파일
[ -encoding UTF-8 ] = 컴파일 할시 인코딩은 UTF-8 으로 변경해준다.
[ -d .] = 해당 패키지에 .class 파일 생성
[ *.java ]= 모든 자바 파일 ( ' * ' 는 와일드 카드로 "모든,전부" 의 뜻을 가지고 있다.)
이렇게 만들어주고
방금 만든 complie 배치 파일만 클릭해주면 자동 으로 컴파일 하기
-끝-