미구분

UTF-8, UTF-16 그리고 ASCII

게임이 더 좋아 2022. 6. 11. 21:52
반응형
728x170

https://nhj12311.tistory.com/59

 


 

UTF-8 형식으로 인코딩이 되지 않아서 소스코드가 망가졌다.

라는 말을 들어봤다면 자기 파일의 인코딩 방식이 뭔지 알아야 한다.

아마도.. ANSI로 되어 있을 것이다. 그렇다면 ANSI는 뭐고 UTF-8은 뭐고 UTF-16은 뭘까?

알아보자

 


유니코드라고 들어본적이 있다면 쉬울 것이다.

바로 UTF가 유니코드다. Unicode Tranformation Format - N-bit 라는 뜻이다.

유니코드가 전세계의 모든 문자를 표현하기 위해 나온 방식이라는 것을 알았다면

UTF-8은 8비트로 문자를 표현하는 방식이라는 것이다라는 느낌이 온다.

8-bit 즉, 1Byte로 표현하는데 우선 UTF-8은 ASCII 방식과 동일하게 작동한다.

** 다시 말해서 ASCII는 UTF-8에 포함되는 개념이라고 볼 수 있다.

 


 

흠.. ASCII 코드도 8-bit인데 모든 문자를 표현하지는 못했단말이지..?

어떻게 같은 8-bit인데 모든 문자를 표현할 수 있는 거지??

사실 ASCII 코드가  일대일 대응방식이라면 UTF는 인코딩하는 방식으로 조금 느낌이 다르다.

UTF-8은 가변 길이 문자 인코딩방식이다.

**즉, 대응이 아니라는 것이다.

??? 그럼 뭔데 ???

UTF-8은 8-bit 만으로 일대일 대응하는 것이 아니라 8비트, 1바이트를 기준으로 인코딩한다는 뜻이다.

예를 들어 영어는 1바이트로 가능한데 한글은 3바이트를 먹는 경우가 있다.

위에 말했듯이 아스키코드와 하위호환이 완벽하게 되므로 1바이트를 인코딩하는 경우는 아스키코드와 같다고 볼 수 있다.

 

우선 유니코드에서 한글은 UTF-8은 가변 인코딩방식이다. 

Regex, 정규식을 많이써서 한글 필터링을 했다면 알겠지만

우리는 "가"부터 "힣"까지 한글이라고 본다. 그리고 유니코드에서는 0xAC00 부터 0xD7A3까지 한글이 차지하고 있다.

다시 말해서 UTF-8은 한글을 인코딩하는 방식을 뜻한다.

 

우리가 한글이 차지하는 메모리는 2 Byte로 배웠지만 UTF-8로 인코딩하게 되면 3바이트가 된다.

 

나무위키 : UTF-8

 

저렇게 바꿔버린다.

 


UTF의 인코딩 방식은 이해했다.

그렇다면 8과 16은 뭘까?

8로 되는데 굳이 16을 만들어야 했나??

 

간략하게 설명하면 UTF-16도 위와 비슷하게 변환하는데 조금 다르다.

한글이 3바이트로 표현되는 반면 16에서는 기본이 2바이트 또는 4바이트만 표현이 가능하다.

다시 말해서 UTF - 8에서 3바이트로 표현되는 문자들이 UTF - 16에서는 2바이트로 표현되므로 메모리를 줄일 수 있다.

 

 

 


 

UTF-8을 쓰는 이유는 앞서 모든 문자를 표현할 수 있어서라고 했다.

그럼 굳이 UTF-8을 쓰는 이유는 뭘까?

어떤 장점이 있는 걸까??

 

1. 하위 호환성을 보장함

ASCII 인코딩은 결국 UTF-8의 부분 집합이다. 포함된다는 뜻이다.

이전에 쓰여졌던 파일도 UTF-8에서 정상적으로 작동한다.

2. 바이트 검색 알고리즘 사용

바이트 단위 문자열 검색 알고리즘을 사용할 수 있어서 따로 만들 필요가 없다.

3. 문자 표현 독립성

한 문자를 표현하는 바이트 표현과 다른 문자를 표현하는 바이트 표현과 겹치지 않는다.

다시 말해서 호환성이 좋다.

4. 빠른 인코딩

인코딩에 간단한 비트연산만 사용되므로 효과적이다.

반응형
그리드형