조리법:시스템 파일 실행시 인자로 UTF-8 문자를 보내는 방법

위클립스
이동: 둘러보기, 찾기

아래의 코드는 윈도우즈에서 C 드라이브를 파일 탐색기로 여는 코드이다.

Runtime.getRuntime().exec(new String[]{"explorer", "c:"});

간단하고 효율적인 이 접근법의 문제는 인자에 한글등 UTF-8이 포함된 경우, 인코딩이 깨져서 넘어간다는 점이다. 당연히 제대로 실행되지 않는다.

이 현상은 현재 윈도우즈의 JVM에서 확인되었다. 꽤 오래된 버그[1]로 수정될 가망이 있을지 모르겠다. Mac OSX의 경우 문제가 없었고, OpenJDK가 설치된 Debian 리눅스에서도 문제가 없었다. 과거에는 리눅스에도 이 문제가 존재했던 듯, 여러 커뮤니티에서 관련 글을 확인 할 수 있었다.

이런 경우 환경 변수에 필요한 정보를 담아 넘기는 꽁수를 이용할 수 있다:

List<String> commands = new ArrayList<String>();
 
// 환경 변수를 이용하기 위해 실행 프로세스를 cmd로 지정한다.
commands.add("cmd");
commands.add("-c");
 
commands.add("explorer");
commands.add("%TARGET_DIR%"); // 실제 폴더 대신 환경 변수를 인자로 넘긴다.
 
ProcessorBuilder pBuilder = new ProcessBuilder(command);
pBuilder.environment().putAll(System.getenv());
pBuilder.environment().put("TARGET_DIR", "c:\\한글 폴더"); // 환경 변수의 값을 지정
pBuilder.start();

[편집] 참고

  1. 꽤 오래된 버그: http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4947220

이 기사에 대한 의견은 토론 페이지를 통해 나눌 수 있습니다.

개인 도구
이름공간
변수
행위
포탈
탐색
도움
도구모음