728x90
반응형
SMALL
1. 인코딩과 디코딩 (Encoding & Decoding)
- 컴퓨터는 문자를 인식할 수 없기 때문에 숫자로 변환되어 저장됨
- 변환해주기 위해서는 기준이 있어야하는데 이것을 문자 코드라고 하며 대표적으로 ASCII코드 또는 유니코드가 있음
- 정보의 형태나 형식을 변환하는 처리에 대해 표준화하고 보안, 처리 속도 향상, 저장 공간 절약 등의 목적으로 사용
1-1. 인코딩(Encoding)
- 컴퓨터에서 사람이 인지할 수 있는 형태의 데이터를 약속된 규칙에 의해 컴퓨터가 사용하는 0과 1로 변환하는 과정
- 인코딩 = 코드화 = 암호화 = 부호화
- 예) 아스키코드 인코딩, URL 인코딩, Base64 인코딩, 유니코드 인코딩 ...
- [유니코드] (https://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/)
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
'Python > Basic' 카테고리의 다른 글
[파이썬, Python] 변수 타입 어노테이션에 대해 알아보자! 🧐 (0) | 2023.03.14 |
---|---|
[파이썬, Python] 클로저(Closure)와 데코레이터(Decorator) (0) | 2023.03.14 |
[파이썬, Python] 파일의 입력과 출력 - open(), close(), with구문, readline(), readlines() (0) | 2023.03.13 |
[파이썬, Python] 예외 처리에 대해 알아보자 🧐 (0) | 2023.03.13 |
[파이썬, Python] 모듈(Module)에 대해 알아보자 🧐 (1) | 2023.03.10 |