본문 바로가기

Java

인코딩과 디코딩

인코딩은 사람이 사용하는 문자난 영상 사진등과 같은 정보를 컴퓨터 상에 표현하기 위해 숫자에 mapping 한 것이다.  

A라는 문자를 컴퓨터에 나타내려면 A에 해당하는 숫자가 있어야 한다. 아스키 코드 상에서는 이것이 65가 된다.

 

디코딩은 이렇게 변환된 문자(혹은 다른 정보)를 다시 원래의 형태로 변환하는 작업을 디코딩이라고 한다.

디코딩을 하기 위해서는 인코딩 방식에 맞는 방식으로 디코딩을 해야 한다. 인코딩 방식에 맞지 않는 디코딩을 하면 엉뚱한 값이 나오기 때문이다. (지금은 많이 없지만 예전에 웹서핑을 하다 보면 글자가 깨지거나 이상한 문자가 나오는 사이트들이 있는 경우가 있다. 그럴 경우엔 인코딩 방식이 맞지 않아서 그러한 결과가 나오는 것이다.)

 

UTF - 8

utf-8은 가변형 인코딩 방식으로 아스키코드표로 나타낼 수 있는 영어의 경우 아스키코드를 그대로 쓴다. 그리고 아스키코드로 표현하지 못하는 부분을 유니코드방식을 이용해서 1~4byte의 가변적인 크기를 이용하여 문자를 다루는 방식이다.

 

UTF - 16

utf-16은 모든 문자의 크기를 2byte로 고정한 인코딩 방식이다. 한글의 경우 utf-16으로 사용하면 바이트의 크기를 줄일 수 있지만 영어의 경우 1byte로도 충분히 표현 가능했지만 2byte로 크기가 고정된다는 단점이 있다.

utf-16에는 big endian 방식과 little endian 방식이 있는데 big endian 방식은 높은 값 -> 낮은 값 순으로 배치하는 방식이며 little endian은 그 반대이다. 

예를 들어 abc라는 문자열이 있고 이것을 big endian 방식으로 나타다면 (0x) 61 62 63 순으로 나타나고,

little endian방식으로 타나내면 (0x) 63 62 61 순으로 나타나게 된다.

* 자바는 기본적으로 utf-16을 사용한다.

 

 

참고로 인코딩과 암호화는 목적 자체가 다르며 둘은 엄연히 다른 것이다. 인코딩은 문자를 mapping 시켜 숫자료 표현한 것이고 암호는 외부로부터 정보를 보호하기 위해서 사용한다. 즉 남이 알아보지 못하게 만드는 데에 의의가 있다. 

 

 

 

Reference

'Java' 카테고리의 다른 글

arraycopy 메서드를 이용한 배열의 복사  (0) 2023.04.26
for each  (0) 2023.04.25
scanner 사용법  (0) 2023.04.18
변수  (0) 2023.04.13
객체지향  (0) 2023.04.03