티스토리 뷰

etc

문자 인코딩과 유니코드

kingsubin 2021. 4. 18. 15:29

컴퓨터의 정보 표현

  • 비트 bit
    • 0 / 1
  • 바이트 byte
    • 적당한 개수의 비트의 묶음
    • 보통 메모리 주소로 식별하는 구분 단위
    • 일반적으로 8비트 (정확히 모든 byte가 8비트는 아님)
  • 옥텟 octet
    • 정확한 8비트를 말함

ASCII (American Standard Code for Information Interchange)

  • Control Characters 0~31 + 127
  • Printable Characters 32~126

문자 인코딩

  • 문자의 번호를 컴퓨터에서 표현하는 방법
  • 문자의 번호 -> 바이트의 열로 표현하는 방법

KS X 1001

  • 국가표준 KS X 1001 정보 교환용 부호계 (한글 및 한자)
    • 구 KS C 5601 - 1987
  • 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)
    • 한글의 경우, 자모에서 초성, 중성, 종성을 하나씩 모아서 한 음절을 표현
      • 음절 하나는 코드포인트 2개, 3개
  • ex) ‘빵’ -> NFC 의 경우 코드포인트 1개로 보나 NFD 의 경우 ‘ㅃ’, ‘ㅏ’, ‘ㅇ’ 으로 코드포인트 3개로 표현할수 있다.
  • mac OS 에서 윈도우나 리눅스로 파일명이 “그래프” 인 파일을 보내면 “ ㄱㅡㄹㅐㅍㅡ’” 이런식으로 보내지는데 이것은 맥은 NFD, 윈도우나 리눅스는 NFC 방식을 사용하기에 생기는 문제다.

'etc' 카테고리의 다른 글

Webstorm screen flickering  (0) 2023.01.01
Java 정규표현식 검사 사이트  (0) 2021.06.01
yaml 설정파일 값 사용하기  (0) 2021.04.01
JSend  (0) 2021.03.24
trailing commas  (0) 2021.03.21