1. Character Set (문자 집합, charset)
- 어떤 문자들이 존재하는가의 목록
- 예: A, B, 가, 나, 같은 문자들이 포함된 "목록"
2. Character Encoding (문자 인코딩)
- 그 문자들을 숫자로 어떻게 변환할 것인가를 정의하는 방식
- 즉, 문자 → 숫자(바이트) 로 바꾸는 규칙
이름 | 역할 | 분류 |
ASCII | 문자 집합 + 인코딩 | 문자 인코딩 방식 |
Unicode | 문자 집합 | 문자 집합 (코드포인트 체계) |
UTF-8 | 유니코드 인코딩 방식 | 문자 인코딩 방식 |
EUC-KR | 문자 인코딩 방식 | 문자 인코딩 방식 |
MS949 | 문자 인코딩 방식 | 문자 인코딩 방식 |
문자 집합(character set)
ASCII코드
- American Standard Code for Information Interchange
- 7비트 문자 인코딩 (0~127 숫자로 128개 문자 표현)
- 주로 영어 알파벳, 숫자, 기호, 제어문자만 포함
유니코드
: 유니코드란, 숫자와 글자, 즉 키와 값이 1:1로 매핑된 형태의 코드 인것이다.
UNICODE는 전 세계의 모든 문자를 컴퓨터에서 일관되게 표현할 수 있도록 고안된 코드 조합이다. 여기서 주의해야 할 것이 유니코드는 '인코딩'이 아니라는 것이다. 유니코드는 전세계 거의 모든 문자를
2bytes 숫자로 1:1 매핑 시키는 '방식'을 말하고, 유니코드를 표현하는 여러가지 '인코딩' 방식들이 존재하는 것이다.
- 유니코드를 HTML에 작성하면 브라우저는 이를 해당 문자로 치환하여 표시
항목 | ASCII | Unicode |
비트 수 | 7비트 (128문자) | 최대 32비트 (이론상 1,114,112문자) |
문자 종류 | 영어, 숫자, 특수문자 | 모든 언어, 기호, 이모지 포함 |
범용성 | 낮음 | 매우 높음 |
인코딩 예시 | 없음 (고정 1바이트) | UTF-8, UTF-16, UTF-32 |
문자 예시 | A, a, #, 1, @ | 가, 中, Я, 😂 등등 모두 가능 |
인코딩 (Encoding)
EUC-KR
: 한글 지원을 위해 유닉스 계열에서 나온 완성형 코드 조합이다.
완성형 코드란 완성 된 문자 하나하나마다 코드 번호를 부여한 것이다.
EUC-KR
- Extended Unix Code – Korean
- 한글 완성형 인코딩 방식
- 한글 2350자(완성형) + 영문/기호 포함
- 1~2바이트 인코딩
- 주로 옛날 웹사이트, Windows 95~XP 등에서 많이 사용됨
MS949 (또는 CP949)
- EUC-KR을 마이크로소프트가 확장한 버전
- EUC-KR + 추가 한글 8822자 포함 (예: 옛한글 등)
- 그래서 EUC-KR보다 더 많은 한글 지원
UTF-8(Universal Coded Character Set + Transformation Format – 8-bit)
: 유니코드를 위한 가변 길이 문자 인코딩(멀티바이트) 방식 중 하나로, ANSI(미국 국가 표준 협회, American National Standards Institute)의 단점(고정된 1바이트 인코딩)을 보완하기 위해 만들어졌다.
ANSI는 다국어를 지원하기 위해 CodePage 정보를 미리 알고 있어야 한다. UTF-8은 멀티바이트 개념을 사용하여 하나의 Character Set에 거의 모든 문자를 넣었다.
멀티바이트란 표현해야 하는 문자에 따라 글자 크기를 가변으로 변경하여 사용하는 것을 말한다.
AASCII - 알파벳 | ASCII - 숫자 | 한글 | 한자 | 일어 | |
EUC-KR | a =1 바이트 0 : 0x61 |
1 =1 바이트 0 : 0x31 |
가 =2 바이트 0 : 0xb0 1 : 0xa1 |
韓 =2 바이트 0 : 0xf9 1 : 0xdb |
あ =2 바이트 0 : 0xaa 1 : 0xa2 |
UTF-8 | a =1 바이트 0 : 0x61 |
1 =1 바이트 0 : 0x31 |
가 =3 바이트 0 : 0xea 1 : 0xb0 2 : 0x80 |
韓 =3 바이트 0 : 0xe9 1 : 0x9f 2 : 0x93 |
あ =3 바이트 0 : 0xe3 1 : 0x81 2 : 0x82 |
UTF-8 vs UTF-16
인코딩 방식:
UTF-8은 가변 길이 인코딩 방식입니다. 각 유니코드 문자를 1바이트부터 최대 4바이트까지 가변 길이로 인코딩합니다. 문자의 유니코드 코드 포인트에 따라 바이트 수가 다릅니다.
UTF-16은 고정 길이 인코딩 방식입니다. 모든 문자를 2바이트로 인코딩합니다. 기본적으로는 BMP(Basic Multilingual Plane)에 있는 문자는 2바이트로 표현되지만, Supplementary Plane에 있는 문자는 4바이트로 표현될 수 있습니다
메모리 공간:
UTF-8은 대부분의 영문 텍스트에 대해 UTF-16보다 더 적은 메모리를 사용합니다. 그러나 몇몇 유니코드 문자는 3바이트 또는 4바이트로 인코딩되어 UTF-16보다 더 많은 메모리를 사용할 수 있습니다.
UTF-16은 모든 문자를 2바이트로 표현하기 때문에 BMP 안에 있는 문자에 대해서는 UTF-8보다 더 많은 메모리를 사용하지만, Supplementary Plane에 있는 문자를 다룰 때는 UTF-8보다 더 적은 메모리를 사용합니다.
UTF-8은 가변 길이 인코딩으로 메모리를 절약하면서 다양한 문자를 효율적으로 표현할 수 있습니다. 반면 UTF-16은 고정 길이 인코딩으로 모든 문자를 동일한 크기로 표현합니다.
// 문자열
String originalString = "안녕하세요! Hello!";
// 문자열을 바이트로 인코딩 (UTF-8 사용)
byte[] byteArray = originalString.getBytes(StandardCharsets.UTF_8);
// 바이트를 문자열로 디코딩 (UTF-8 사용)
String decodedString = new String(byteArray, StandardCharsets.UTF_8);
https://norux.me/31
https://gaeng-stroy.tistory.com/163
'WEB개념 > 기타(ETC..)' 카테고리의 다른 글
[ETC] WebSphere SQL로그 문제 (0) | 2021.12.27 |
---|