[JAVA] getBytes시 charset 설정 안했을 경우 기본 encoding 값은 무엇일까?

최대 1 분 소요

우리가 String을 byte로 변환하는 경우가 종종 있다.

그때, getBytes() 메소드를 사용하는데 우리는 원하는 방식의 인코딩을 파라미터로 넣어주기도 한다.

예를 들면, string.getBytes(“UTF-8”); 이런식으로 작성한다.
만약, 인코딩 방식을 넣어주지 않는다면 어떤 방식으로 인코딩이 되는 지 알아보자!


이를 알아보기 위해, 직접 코드를 까봤다. JDK 1.7 버전이다.
getBytes을 타고 들어가면 StringCoding.class의 encode 메소드를 호출한다.

해당 메소드는 String charsetName이 인자로 존재하는 메소드와 없는 메소드로 오버로딩이 되어있는것을 확인할 수 있다.

이때 charsetName이 없는 경우를 봐야 인코딩 방식의 기본값을 알 수 있으니 들어가 봤다.
메소드를 확인해본 결과, Charset 클래스의 defaultCharset 메소드를 통해 charset을 가져온다.

엇? 그럼 Charset 클래스의 defaultCharset은 어떤 값을 가지고 있는 거지??

알아보기 위해 또 타고 들어갔다.
코드를 살펴 본 결과 현재 시스템의 JVM 기본 설정 인코딩을 가져오는 것을 알 수 있다.
JVM의 기본 설정이 없다면 “UTF-8” 을 설정하고 있었다.

그렇다면 JVM의 기본 인코딩 설정은 어떻게 알 수 있을까??
JVA_OPTS에서 여러가지 JVM에 대한 설정을 할 수 있는데, 이때 인코딩에 대한 설정도 할 수 가 있다!! (이 방식에 대해 궁금하다면, 더 알아보자!)

정리하자면, charset을 설정해주지않는 경우에 한해서 1순위는 JVM의 인코딩 설정, 2순위는 UTF-8가 되는 것이다.
물론, 기본 인코딩 설정을 넣어주는 경우는 아예 다른 메소드(오버로딩)를 호출하기 때문에 인자로 받은 인코딩 방식으로 진행하게 된다!

댓글남기기