본문 바로가기
Python/Basic

[파이썬, Python] 인코딩과 디코딩(Encoding & Decoding) - 유니코드(utf-8, utf-16), 아스키 코드(ascii)

by coding-choonsik 2023. 3. 14.
728x90
반응형
SMALL

1. 인코딩과 디코딩 (Encoding & Decoding)

  • 컴퓨터는 문자를 인식할 수 없기 때문에 숫자로 변환되어 저장됨
  • 변환해주기 위해서는 기준이 있어야하는데 이것을 문자 코드라고 하며 대표적으로 ASCII코드 또는 유니코드가 있음
  • 정보의 형태나 형식을 변환하는 처리에 대해 표준화하고 보안, 처리 속도 향상, 저장 공간 절약 등의 목적으로 사용

 

1-1. 인코딩(Encoding)

  • 컴퓨터에서 사람이 인지할 수 있는 형태의 데이터를 약속된 규칙에 의해 컴퓨터가 사용하는 0과 1로 변환하는 과정
  • 인코딩 = 코드화 = 암호화 = 부호화
  • 예) 아스키코드 인코딩, URL 인코딩, Base64 인코딩, 유니코드 인코딩 ...
  • [유니코드] (https://home.unicode.org/)
 

Home

 

home.unicode.org

 

  • string에서 bytes로 변환된걸 볼 수 있다.
txt1 = 'Hello Python!'
type(txt1)
>>> str

txt2 = txt1.encode('utf-8')   # 'utf-8': 유니코드 종류 중 하나
type(txt2)
>>> bytes

print(txt2)
>>> b'Hello Python!'    # 원래는 bit로 이루어진 문자가 나옴

# 영어를 제외한 모든 언어를 인코딩하면 아래와 같은 코드로 변환됨
txt3 = '안녕하세요 파이썬'
print(txt3.encode('utf-8'))  
>>> b'\xec\x95\x88\xeb\x85\x95\xed\x95\x98\xec\x84\xb8\xec\x9a\x94 \xed\x8c\x8c\xec\x9d\xb4\xec\x8d\xac'

1-2.  디코딩(Decoding)

  • 사람이 이해할 수 있는 언어로 되돌리는 것
  • 디코딩 = 역코드화 = 복호화
txt3 = '안녕하세요 파이썬'
txt4 = txt3.encode('utf-8')
print(txt4)

>>> b'\xec\x95\x88\xeb\x85\x95\xed\x95\x98\xec\x84\xb8\xec\x9a\x94 \xed\x8c\x8c\xec\x9d\xb4\xec\x8d\xac'

print(txt4.decode('utf-8'))
>>> 안녕하세요 파이썬

# 한글을 아스키코드로 변환?
print(txt4.decode('ascii')
>>> UnicodeDecodeError: 'ascii' codec can't decode byte 0xec in position 0: ordinal not in range(128)

 

2. 아스키 코드(ASCII) 코드

  • 아스키(ASCII)는 미국정보교환표준부호(American Standard Code for Information Interchange)의 약어
  • 미국 ANSI에서 표준화한 정보교환용 7비트 부호체계
  • 일반적으로 데이터는 byte 단위로 다뤄지는데 ASCII는 1바이트를 구성하는 8비트 중에서 7비트만 사용하고 나머지 1비트는 통신 에러 검출을 위해 사용
  • ASCII코드는 매우 단순하고 간단하여 어느 시스템에서도 적용 가능하다는 장점
  • 2바이트 이상의 코드를 표현할 수 없다는 단점

 

2-1. 확장 아스키(ASCII)와 한글

  • ASCII는 1바이트를 구성하는 8비트 중 7비트만 사용하는데 나머지 1비트를 활용해서 추가로 문자를 정의한 것이 확장 ASCII
  •  확장 ASCII에 추가된 128개의 문자는 여러 국가와 기업에서 필요에 따라 서로 다르게 정의하여 사용
  • ISO 8859-1 : 국제표준화기구에서 정의한 확장 ASCII 이며 서유럽에서 일반적으로 사용하는 문자들을 포함. 'ISO Latin 1' 이라고도 함.
  • CP949 : 마이크로소프트에서 정의한 한글 문자 집합. EUC-KR에서 지원되는 한글 2350자 외에 나머지 8822자가 추가되었으며 Win95 한글판에 탑재되어 배포됨.

3. 유니코드

  • 모든 문자 체계를 하나의 문자 집합으로 만든 것이 유니코드
  • 먼저 포함시키고자 하는 문자 집합을 정의하였는데 이것을 문자 셋 또는 캐릭터 셋(character set)이라고 함
  • UTF(Unicode Transformation Format) 이라고 하며 여기에 번호를 붙인 것이 유니코드 인코딩
  • 유니코드 인코딩에는 UTF-8, UTF-16, UTF-32 등이 있는데 대표적으로 쓰이는 UTF-8과 UTF-16
  • [유니코드 변환 사이트] (https://checkserp.com/encode/unicode/)
 

Unicode Converter, Unicode Encoding and Decoder

Online Unicode converter, easy to use unicode encoding and decoder tool. Convert plain text to unicode codes and vice versa.

checkserp.com

 

3-1. UTF-8

  • 하나의 문자를 1~4바이트의 가변길이로 표현
  • 1바이트 영역은 ASCII코드와 하위 호환되며 ASCII코드의 128개 문자 집합은 UTF-8과 동일하게 호환됨
  • 현재 인터넷에서 가장 많이 쓰이는 인코딩이며 뛰어난 크로스플랫폼 호환성도 갖고 있음

 

3-2. UTF-16

  • 모든 문자를 2바이트의 고정크기로 표현하고 UTF-8과 마찬가지로 ACII코드의 128개 문자 집합에 대해 호환성을 가짐.
  • 바이트 순서가 정해지지 않아 리틀/빅 엔디안 문제가 발생하기 때문에 인터넷 상에서의 사용을 권고하지 않음. 
  • Java와 .NET Framework의 기본 인코딩.

 

728x90
반응형
LIST