본문 바로가기
Category/JAVA

[JAVA] 여러가지 측면에서의 인코딩 방식

by developer__Y 2024. 8. 27.

 

운영중인 web에서 외부 모듈과 socket 통신하여 결과 데이터를 받아오는 과정에서 인코딩 문제가 발생했다.

web에서는 UTF-8 인코딩을 사용하지만, 외부 모듈에서는 EUC-KR 인코딩을 사용하기때문이다.

해당 문제를 해결하기위해 JAVA에서 사용하는 다양한 측면에서의 인코딩 방식에 대해 공부해보았다.

 

여러가지 측면에서의 인코딩 방식

 

통합개발환경(IDE)를 사용하며 JAVA를 통해 개발을 할때에 사용하는 인코딩 형식은 여러가지 측면에서 나누어 볼수있다.

 

1. 소스코드 컴파일&빌드 측면에서의 파일 인코딩

 

이클립스,인텔리제이등 통합개발환경에서 코드를 작성하고 실행시키기위해 해당 코드를 컴파일하거나, 빌드를 할때 사용하는 인코딩 방식이다.

해당 인코딩 설정은 사용중인 Eclipse, InteliJ의 환경설정에서 파일 인코딩 형식을 변경할수있다.

 

2. JAVA I/O 작업측면에서의 인코딩 형식

 

파일을 읽고 쓰거나, 네트워크 통신을 포함하여 외부 자원과의 광범위한 통신을 할때 데이터를 읽고쓰는 I/O작업을 할때에 사용하는 인코딩 형식이다.

java.io 패키지를 사용하여 입출력스트림을 통해 데이터를 읽고 쓸때에 바이트 단위의 데이터를 상황에 맞게 인코딩을 하여 사용해야한다.

 

다음은 I/O패키지의 최상위 클래스인 InputStream과 OutputStream에서 입/출력 스트림을 문자스트림으로 변환시켜주는 하위 클래스인 InputStreamReader의 생성자로, 매개변수 Charset cs을 통해 어떠한 인코딩 형식으로 해당 Byte 스트림을  문자 스트림으로 변환시킬지 설정할수있다.

 

 

3. JVM의 기본문자 인코딩 형식

Java Application내에서 기본적으로 파일,데이터를 읽고쓸때에 사용하는 Default Encoding 방식이 설정되어있어 위의 I/O 작업또한 JVM의 관리하에 작동되는 Java Application의 일부 작업이므로 파일 입출력이나 문자열 처리에 관련된 인코딩 형식을 직접 지정 해주지않는다면 file.encoding 시스템 속성에 설정된 default encoding으로 처리된다.

JVM default characterSet을 확인&변경하는 방법은 아래 코드를 통해 할수있다.

 

System.getProperty("file.encoding");

System.setProperty("file.encoding", "UTF-8"); 

 

또한 Charset의 defaultCharser() 메소드를 통해 jvm에서 기본적으로 사용하고있는 문자셋 형식에 대해 확인할수있다.