cmd에서 예제 코드를 컴파일 하려는데, 아래와 같은 에러가 발생했다.
우선 이 에러가 무엇인지 모르다보니 지식의 신(?) 구글에게 질문을 하기로 했다. 구글링으로 해당 키워드인 encoding MS949라는 것을 알아보았다.
이 MS949는 기존 한글 Windows에서 쓰던 CP949 방식에서 마이크로소프트에서 EUC-KR 방식으로 확장된 Charset이였다. 이 문제를 해결하기 위해서 현재 내 컴퓨터에서는 무슨 방식을 쓰는지 확인이 필요했고 나는 cmd에 chcp를 입력하여 활성 코드 페이지를 확인하였다.
위와 같이 입력하면 cmd에서 현재 활성되어 있는 Code Page를 확인 할 수 있다. 이렇게 확인한 결과 이 에러는 인코딩 방식을 CP949가 아닌 CP65001(UTF-8)로 해결해주면 되는 문제였다.
1. cmd에서 -encoding UTF-8 입력 (★)
우선 당장의 문제를 해결하기 위해 현재 파일을 UTF-8로 인코딩하는 방법을 찾았고, 그 방법이 cmd에서 해당 파일의 인코딩을 UTF-8로 돌리는 것이었다.
이렇게 했더니 정상적으로 컴파일도 이루어지고, 실행도 문제 없이 진행됐다.
하지만 또 다시 컴파일을 할 때면 계속 저 인코딩을 변경해야하는 번거로움이 생길 수 밖에 없다. 나는 저 문제를 근본적으로 해결하고 싶어서 또 다른 방법을 찾아보았다.
2. cmd에서 Code page 자체를 변경하는 방법(★★)
찾아본 방법은 cmd에서 code page 자체를 변경하는 방법으로 기존의 949를 65001로 변경하는 방식으로 cmd에서 chcp 명령어를 사용하여 변경하는 것이 었다.
cmd에 chcp 65001을 입력하자, 위와 같은 결과 화면이 출력되면서 활성 코드 페이지가 65001으로 바뀌었고, 그 위에서 컴파일을 했더니 -encoding UTF-8을 입력하지 않아도 .class 파일이 문제 없이 생성됐다.
그렇지만 이 방법도 역시 cmd 창을 종료하고 다시 켜면 활성 코드 페이지가 다시 949로 바뀌었다. 한 번 전환된 코드 페이지에서 연속의 작업을 진행할 때는 위의 1번 방법보다는 개선되었지만 여전히 내가 원하는 문제를 해결하지는 못했기에 다른 방법을 다시 찾아보았다.
3. 레지스트리로 cmd code page를 지정하는 방식(★★★)
재실행에도 내가 원하는 Code Page로 실행되는 방법을 계속해서 찾다가 알게 된 것이 바로 레지스트리로 cmd code page를 지정하는 방식을 등록하는 것이다.
레지스트리로 Code page를 지정하는 방법은 다음과 같다.
① 레지스트리 편집기를 실행하기 위해서 시작 + R 로 실행창을 열고 regedit을 실행한다.
② HKEY_CURRENT_USER 에서 Console을 찾고 해당 파일에서 우클릭 '새로 만들기 > 키'를 클릭한다.
③ 위와 같이 생성한 새 키의 이름을 %systemRoot%_System32_cmd.exe 로 변경한다.
④ 생성한 새 키의 안에 '새로 만들기 > DWORD(32비트) 값' 을 클릭하여 만들어준다.
⑤ 생성된 값의 이름은 CodePage로 명명한다. 그리고 값을 클릭하여 편집창을 띄워서 단위는 10진수로 변경하고, 값 데이터에는 65001을 입력한 후 레지스트리 편집기를 종료한다.
⑥ 위의 방법이 안되는 경우, 레지스트리 자체에서 기본값을 바꿔주는 방식을 사용하면 된다.
우선 레지스트리 편집기에서 아래의 경로로 이동한다.
컴퓨터\HEKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Nls\Codepage
그리고 우측 화면에서 OEMCP 혹은 ACP를 찾아서 클릭하고 아래와 같이 문자열 편집창에 값을 65001로 변경한다.
그 다음에 재부팅하면 명령 프롬프트에 지정한 65001 Charset이 설정됨을 확인할 수 있었다. 그 이후에도 cmd을 종료하고 다시 실행하거나 pc를 재부팅해도 Code page의 변경이 일어나지 않았다. 이렇게하면 UTF-8을 매번 번거롭게 입력하지 않아도 된다.
'Error Log' 카테고리의 다른 글
[npm Error]npm WARN config global `--global`, `--local` are deprecated. Use `--location=global` instead 해결하기 (0) | 2023.01.07 |
---|---|
[Git] Permission denied 에러 해결하기 (0) | 2022.01.12 |
VS code Live Server : '페이지가 작동하지 않습니다' 오류 해결 방법 (1) | 2021.04.20 |