[1. 개요]
특정 charset 으로 인코딩 된 byte stream 을 적절히 인코딩 및 디코딩 하는 방식 정리
[2. 배경지식]
인코딩
- 평문(문자) 을 정해진 규칙에 따라 값 으로 표현
- 'A' => 0x41
디코딩
- 값을 정해진 규칙에 따라 평문(문자) 로 표현
- 0x41 => 'A'
인코딩 / 암호화
디코딩 / 복호화
[3. 예제]
data = b'\xbc\xbc\xc1\xbe\xb4\xeb\xb7\xce'
#data = bytes([0xbc, 0xbc, 0xc1, 0xbe, 0xb4, 0xeb, 0xb7, 0xce])
# 혹은 위와 같이 작성 가능.
try:
print("decoding result", data.decode('utf-8'))
except Exception as e:
print("error", e)
print("decoding result", data.decode('euc-kr'))
data2 = data.decode('euc-kr').encode('utf-8')
print("type is:", type(data2))
print("encoding result:", data2)
print("decoding result:", data2.decode('utf-8'))
출력 |
error 'utf-8' codec can't decode byte 0xbc in position 0: invalid start byte decoding result 세종대로 type is: <class 'bytes'> encoding result: b'\xec\x84\xb8\xec\xa2\x85\xeb\x8c\x80\xeb\xa1\x9c' decoding result: 세종대로 |
data 는 어떤 문자열을 인코딩 한 byte array
- euc-kr 로 인코딩 하였기에, utf-8 로 디코딩 할 수 없음.
data 를 decoding 한 후, 이 문자열을 다시 utf-8 로 인코딩 함.
- data 와 data2 의 값이 다르다.
- 인코딩 방식이 다르기 때문.
'Python' 카테고리의 다른 글
기타 입력 처리 (map) (0) | 2024.08.20 |
---|---|
example. numpy & cv2 (0) | 2024.05.09 |
[python] bearing (0) | 2024.03.27 |
[python] haversine distance (0) | 2024.03.27 |
python. io 성능 (0) | 2023.10.04 |