인코딩, 디코딩을 이해하기 위해서
선행되어야 할 개념으로
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 배열로 관리되므로
별도의 인코딩방식을 갖지 않는다
'알아두면 좋은 IT 지식 > Java' 카테고리의 다른 글
GC 분석 툴 - PMAT(IBM GC Pattern Modeling and Analysis Tool for Java Garbage Collector) (0) | 2023.12.30 |
---|---|
GC 로그 분석 툴 - jstat 사용법 (0) | 2023.12.25 |
[IT] Java Thread Dump 생성 및 분석 방법 (kill -3 / jstack / jcmd) (0) | 2022.08.22 |
JSON이란? (0) | 2020.10.15 |
url에서 pdf를 읽어와서 파일로 저장하기 (0) | 2020.09.29 |