본문 바로가기

알아두면 좋은 IT 지식/Java

자바 한글 인코딩 변환 (utf-8 to euc-kr java)

인코딩, 디코딩을 이해하기 위해서

선행되어야 할 개념으로

Binary(바이너리)가 있다

 

Binary란?

사람이 이해할 수 있는 문자를

컴퓨터가 이해할 수 있는 이진법(0,1)으로

표현한 표현식, 이진파일을 의미한다

문자를 바이너리로 변환하는 것을 인코딩

바이너리를 문자로 변환하는 것을 디코딩

이라고 한다

 

그리고 우리가 많이 사용하는

UTF-8, EUC-KR 등은 인코딩 방식 중 하나이다

 

 

 

 

 

그렇다면 자바에서는 어떻게 사용할까?

자바에서는 대표적으로 문자는 String타입을

바이너리는 byte array타입을 사용한다

즉, String을 byte[]로 변환할 때 인코딩

byte[]를 String으로 변환할 때 디코딩을

사용해주면 된다.

 

예제로 보면 아래와 같다

try{
	//String을 byte[]로 인코딩
	byte[] bytMSG = "텍스트".getBytes("UTF-8");

	//byte[]를 String으로 디코딩
	String strMSG = new String(bytMSG, "UTF-8");
    
} catch (UnsupportedEncodingException uee) {}

"텍스트" 라는 문자(String)를

UTF-8 방식으로 인코딩하여

byte[](바이너리) 변수 bytMSG에 할당했다

 

반대로 바이너리 데이터인 bytMSG를

UTF-8 방식으로 디코딩하여

String(문자) 변수 strMSG에 할당했다

 

인코딩과 디코딩 시 사용한

인코딩 방식은 반드시 동일해야 하며

만약 다를 경우 (당연히)문자가 깨진다

 

 

 

 

 

그럼 이제 UTF-8 형식의 바이너리 데이터의

인코딩 방식을 EUC-KR로 변경해보자

Java에서는 아래와 같은 순서대로

인코딩 방식을 변경할 수 있다

예제로 보면 아래와 같다

try{
	//String을 byte[]로 UTF-8형식으로 인코딩
	byte[] bytMSG_utf = "텍스트".getBytes("UTF-8");

	//UTF-8형식으로 인코딩된 byte[]를 String으로 UTF-8형식으로 디코딩
	String strMSG = new String(bytMSG_utf, "UTF-8");

	//String을 EUC-KR형식으로 인코딩하여 byte[]에 할당
	byte[] bytMSG_euc = strMSG.getBytes("EUC-KR");
    
} catch (UnsupportedEncodingException uee) {}

 

※ Java의 String객체는 디코딩되어

16비트의 Unicode char 배열로 관리되므로

별도의 인코딩방식을 갖지 않는다