eshell에서 Java의 한글 인코딩 문제

Emacs 2016. 10. 17. 11:16

eshell에서 Java의 한글 인코딩 문제

문제

emacs의 eshell에서 java class를 컴파일 하고 실행했을때 한글이 깨져서 출력되는 인코딩 문제가 발생

import java.util.*; // Scanner를 사용하기 위해 추가

class ScannerEx {
    public static void main(String[] args) {
    Scanner scanner = new Scanner(System.in);

    System.out.print("두자리 정수를 하나 입력해주세요.>");
    String input = scanner.nextLine();
    int num = Integer.parseInt(input); // 입력받은 문자열을 숫자로 변환

    System.out.println("입력내용 :" + input);
    System.out.printf("num=%d%n", num);
    }
}
$ javac -encoding utf-8 ScannerEx.java
$ 
$ java ScannerEx
   ڸ          ϳ   Է    ּ   .>10
 Է³    :10
num=10
$ 

설명

emacs 편집기에서 기본 인코딩이 유니코드(utf-8)로 설정이 되어있다면 eshell에서도 그대로 그 설정을 따른다. 그러나 java는 기본적으로 운영체제의 기본 인코딩을 따르도록 되어있고 한글 윈도우의 기본 인코딩은 유니코드가 아닌 ms949이다. 즉, eshell의 인코딩은 유니코드 이지만 java 코드를 실행했을때 java는 외부 환경이 ms949 인코딩이라 판단하여 인코딩 충돌이 발생하는것이다.

문제 해결

java로 실행을 할때 -Dfile.encoding=utf-8 옵션으로 직접 인코딩을 지정해준다. (주의 : -D 와 file.encoding 사이에 공백이 없음)

$ java -Dfile.encoding=utf-8 ScannerEx
두자리 정수를 하나 입력해주세요.>10
입력내용 :10
num=10

매번 긴 옵션을 타이핑 하는것은 번고롭기 때문에 eshell에서 alias 설정(일종의 별명)을 해주자.

$ alias javac 'javac -encoding utf-8 $*'
$ alias java 'java -$*'
$
$ java ScannerEx
두자리 정수를 하나 입력해주세요.>100
입력내용 :100
num=100
$ 

alias 설정은 일회성이 아니고 별도의 파일인 ~/.emacs.d/eshell/alias 에 기록되어 필요에 따라 편집이 가능하다. 직접 alias를 수정할 경우 emacs 세션을 재 시작해야 적용되는것 같다.

2016-10-17 오전 11:13:28

설정

트랙백

댓글