ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 문자 인코딩과 유니코드
    etc 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
킹수빈닷컴