개발 서버에서 로컬로 가져와 노트패드에서 파일의 길이를 체크하는데 인코딩 방식이 달라(byte 길이) 개발하는데 난항을 겪은 경험이 있다. 그래서 이번 기회에 정리하는 인코딩 개념! 😃
Character Set (문자집합)
- 컴퓨터가 인식할 수 있는 문자 모음, 문자 집합에 속한 문자를 인코딩하여 0과 1로 표현한다
ASCII (아스키)
- 초창기 문자 집합 중 하나, 영어 알파벳과 아라비아 숫자 그리고 일부 특수문자 포함 예) 'A' -> 65, 'a' -> 97
- 0~127까지 수가 할당되어 아스키 코드로 인코딩
- 7bit 사용(원래는 8bit 인데 나머지 1bit는 parity bit라는 오류 검출용)
- ASCII에서는 영어만을 고려하여 만들어졌고, 일본어 중국어 등 다른 언어는 표현이 불가능하다
ANSI(American National Standard Institute)
- ANSI는 8bit로 구성되어 있으며 256개의 문자를 표현할 수 있다
- ANSI는 ASCII의 확장판으로 이해하면 된다
- '한글'을 EUC-KR로 인코딩하면 4byte
EUC-KR
- EUC-KR 은 한글을 2byte로 인코딩 크리고 인코딩할 수 있는 완성형 인코딩 방식이다
- EUC-KR 로 한글을 총 2,350개 인코딩 가능하지만 '쀍, 쀓, 믜' 같은 인코딩은 불가하다
- '한글'을 EUC-KR로 인코딩하면 4byte
CP949
- EUC-KR처럼 일부 한글은 인코딩 안되는 문제를 해결하기 위해 등장했다
- 그래도 다양한 문자 인코딩 하기 어렵다
UTF-8
- 나라마다 다른 인코딩을 구현한다면 다국어 페이지처럼 각 나라의 언어르 인코딩을 모두 알아야하는 번거로움이 있는데 그래서 등장한 것이 유니코드
- 유니코드는 여려나라의 문자들을 광범위하게 표현할 수 있는 통일된 문자 집합
- UTF-8, UTF-16, UTF-32 는 유니코드 문자의 인코딩 방식
- 여기서 주의해야 할 것이 유니코드는 '인코딩'이 아니라는 것이다. 유니코드는 전세계 거의 모든 문자를 칭한다
- '한글' 을 UTF-8로 인코딩하면 6byte
❗️통일된 인코딩 방식을 구현하고자 유니코드가 등장한 것
ASCII -> ANSI → EUC-KR -> CP949 -> UTF-8
- 현재는 UTF-8을 가장 많이 씀
🐥 서버에서 파일 character set 인코딩 명령어
인코딩 확인
명령어 : file -bi abc.txt
결과 : text/html; charset=utf-8
인코딩 변환
명령어 : iconv -c -f utf-8 -t euc-kr abc.txt > test.txt