-
컴퓨터의 정보 표현
- 비트 bit
- 바이트 byte
- 적당한 개수의 비트의 묶음
- 보통 메모리 주소로 식별하는 구분 단위
- 일반적으로 8비트 (정확히 모든 byte가 8비트는 아님)
- 옥텟 octet
ASCII (American Standard Code for Information Interchange)
- Control Characters 0~31 + 127
- Printable Characters 32~126
문자 인코딩
- 문자의 번호를 컴퓨터에서 표현하는 방법
- 문자의 번호 -> 바이트의 열로 표현하는 방법
KS X 1001
- 국가표준 KS X 1001 정보 교환용 부호계 (한글 및 한자)
- 94 * 94 행렬에 각종 기호, 한글 음절 (2,350자), 한자, 히라가나, 카타카나 등 배정
- 왜 94 * 94 ?
- Printable Characters 와 연관이 있음
- 문자 집합과 문자 인코딩은 서로를 고려하여 설계된다.
EUC-KR (Extended Unix Code)
- 멀티바이트 문자 인코딩
- ISO-2022
- 8번째 비트가 0인 옥텟: KS X 1003 (ASCII 를 약간 수정한 것)
- 8번째 비트가 1인 옥텟 둘: KS X 1001 의 문자 행번호와 열번호를 각 옥텟으로
- 그래서 이전에는 흔히 영숫자는 1바이트, 한글은 2바이트라고 했음
유니코드 (Unicode)
- 전 세계의 모든 문자를 담은 하나의 문자 집합을 만들어 모두가 이것을 쓰자는 의도로 만듬
- 코드 포인트 (code point)
- 문자의 번호 라는 뜻
- 표기법: U+0030 (최소 4자리, 16진법)
- 코드 포인트의 범위: 0 ~ 10FFFF(16) (21비트)
- 플레인 (plane)
- 10000(16) = 65536(10) 개의 범위를 묶어 부르는 말
- BMP (Basic Multilingual Plane)
- Plane 0, U+0000 ~ U+FFFF
- 대부분의 현대 문자, 기호 등을 포함하는 주로 사용하는 플레인
- U+0000 ~ U+007F 는 ASCII 와 같음
유니코드 인코딩
- UTF (Unicode Transformation Format)
- UTF - 32
- 32 비트 정수 표현은 모든 코드포인트를 표현할 수 있다.
- UTF - 8
- 기존 ASCII 텍스트와의 호환
- 가변 길이 인코딩
- 처음 연속된 1의 개수 및 그 뒤의 0으로 바이트를 분할
- UTF - 16
- 가변 길이 인코딩
- BMP의 문자는 16비트 정수로 표현 가능
- 그 외의 문자는 2개의 16비트 값으로 표현
- BOM (byte order mark)
- U+FEFF
- 바이트열의 엔디안을 표현 -> 배열하는 방
- U+FEFF 가 어떻게 표현되었는지 보면 알 수 있음
- 텍스트의 가장 앞에 위치
- 선택적, 없어도 됨
유니코드 정규화
- 하나의 문자가 유니코드로 2가지 이상의 표현이 존재하는 경우
- NFC (Normalization Form C)
- NFD (Normalization Form D)
- 한글의 경우, 자모에서 초성, 중성, 종성을 하나씩 모아서 한 음절을 표현
- ex) ‘빵’ -> NFC 의 경우 코드포인트 1개로 보나 NFD 의 경우 ‘ㅃ’, ‘ㅏ’, ‘ㅇ’ 으로 코드포인트 3개로 표현할수 있다.
- mac OS 에서 윈도우나 리눅스로 파일명이 “그래프” 인 파일을 보내면 “ ㄱㅡㄹㅐㅍㅡ’” 이런식으로 보내지는데 이것은 맥은 NFD, 윈도우나 리눅스는 NFC 방식을 사용하기에 생기는 문제다.