본문 바로가기

Python

[파이썬] 텍스트 인코딩 및 디코딩

[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