자바 파일의 인코딩

Y37·2023년 2월 21일

IDE에서 자바 파일을 열었더니 잘못된 인코딩으로 파일이 로드되었다는 메시지가 나왔다.
파일의 인코딩에 대해 잘 모르고 있다는 생각이 들어 관련 내용을 학습하기로 했다.

1. 모든 파일에는 인코딩이 존재한다.

파일의 내용은 컴퓨터에서 이진(binary) 데이터로 저장되고 이진 데이터를 해석하기 위해서는 해당 데이터가 어떤 인코딩 방식으로 인코딩되어 있는지를 알아야 할 필요가 있다.

위 이미지를 보면 현재 IDE에서 파일의 데이터를 잘못된 인코딩(UTF-8)으로 불러왔고 x-windows-949으로 다시 로드할 것을 권유하고있다. 해당 파일의 데이터가 x-windows-949(=CP949) 방식으로 인코딩 되어 있다는 것을 알 수 있다.

2. 운영체제도 인코딩을 가진다.

자바 파일을 다른 운영체제나 다른 에디터에서 작성하는 경우에는 인코딩을 확인해야 하는데 운영체제에서 사용하는 인코딩과 코드 파일의 인코딩이 서로 다를 때 문제가 발생하는 경우가 있기 때문이다.

이 경우 작성 중인 코드 파일의 인코딩을 윈도우 운영 체제와 호환되는 인코딩으로 변경해 볼 수 있다.

윈도우에서는 명령 프롬프트에 chcp 명령어를 이용해 현재 운영체제에서 사용하는 인코딩을 확인할 수 있다.

3. 자바 파일의 내용에는 기본적으로 어떤 인코딩으로 작성되었는지를 나타내는 정보가 없다.

따라서 다른 방법으로 인코딩 방식을 확인해야 한다.

IDE에서는 자동으로 확인 후 잘못된 인코딩으로 불러왔다면 인코딩 변경을 제안하기도 한다.

리눅스에서는 file 명령을 사용하면 파일의 인코딩을 확인 가능하다.

file -i 파일명

4. 코드 파일을 저장할 때 인코딩을 명시하는 것이 좋다.

하지만 자바는 기본적으로 UTF-8 인코딩을 사용하기 때문에 인코딩을 명시하지 않아도 대부분 잘 작동한다.

  • 인코딩을 명시하지 않는 경우, 다른 운영 체제 또는 다른 환경에서 잘못된 인코딩이 사용돼 예기치 않은 동작을 일으키는 경우도 있다.

  • 다른 사람과 코드를 공유할 때, 모든 사람들이 동일한 인코딩을 사용하게 되어 불필요한 오류를 방지할 수 있다.

5. 자바 코드 파일은 일반적으로 UTF-8 인코딩을 사용하는 것이 좋다.

  • 세계적으로 사용되는 모든 문자를 지원하고 높은 호환성과 안정성을 가지고 있기 때문에 국제화 작업에 유용하다.

  • UTF-8은 ASCII 문자를 1바이트로 표현 할 수 있어, ASCII 코드와 호환성을 유지할 수 있다.

6. BOM은 일반적으로 자바 파일에 사용하지 않는다.

BOM이 포함된 파일은 일부 에디터나 도구에서 예상 밖의 동작을 일으킬 수 있고 일부 라이브러리와 호환성 문제가 발생할 수 있다.

따라서 BOM 외에 인코딩 방식을 명시할 수 있는 다른 방법을 사용하는 것이 좋다.
예를 들어, 파일의 첫 번째 줄에 주석으로 인코딩 방식을 명시할 수 있다.

Oracle JDK에서는 적어도 UTF-8 파일의 바이트 순서 표시(BOM)가 Java에서 허용되지 않습니다.
왜냐하면 수정되지 않을 버그(JDK-4508058) 때문에(하위 호환성 문제 때문에)입니다.

https://stackoverflow.com/questions/37627577/what-charset-to-use-when-reading-in-a-java-source-file

7. 결론

자바 개발에 기본적으로 UTF-8 인코딩을 사용하고
자바 파일을 불러올 때, 다른 인코딩으로 저장되어 있지는 않은지 체크한다면
큰 문제는 없을 것으로 보인다.

profile
학습하는 개발자

0개의 댓글