2020-03-08

파이썬 인코딩과 디코딩 (문자열, JSON)

0. 참고한 자료

https://medium.com/@chrisjune_13837/%EC%9D%B8%EC%BD%94%EB%94%A9%EA%B3%BC-%EB%94%94%EC%BD%94%EB%94%A9-87006cf8dee2

https://norux.me/31

https://studyforus.tistory.com/167

http://pythonstudy.xyz/python/article/205-JSON-%EB%8D%B0%EC%9D%B4%ED%83%80



1. 파이썬에서 모든 문자열은 유니코드이다.


2. Encode(암호화)

우리가 보는 문자열들은 '사람이 보기 좋은 형태'를 띠고 있다.

하지만 컴퓨터간의 통신에서는 바이트 코드로 변환된 형태가 훨씬 처리하기 용이하다.

그래서 '사람이 보기 좋은 형태'에서 '암호처럼 알아보기 힘든 형태'로 바꾸는 과정을

encode(암호화)라고 한다.



아래의 파이썬 코드로 인코딩된 바이트코드를 볼 수 있다.

string = '한글'
encoded = string.encode('utf-8')
print(encoded)
b'\xed\x95\x9c\xea\xb8\x80'
encoded = string.encode('euc-kr')
print(encoded)
b'\xc7\xd1\xb1\xdb'

그래서 간혹 데이터 처리 도중 바이트 코드를 발견하기도 한다.

그럴 때 필요한 것은 암호화의 반대인 decode(복호화)다.



3. Decode(복호화)

파이썬에서 디코딩한다는 것은 바이트 코드를 유니코드로 변환하는 것이다.

바이트 코드는 알파벳 b 뒤에 따옴표(')로 감싸서 표현된다.

마치 raw string을 표현하기 위해 r'~~'를 쓰는 것과 비슷하다.

아래처럼.

string = b'\xc7\xd1\xb1\xdb'
encoded = string.decode('euc-kr')
print(encoded)



4. 글자가 깨져요

그건 바이트 코드를 엉뚱한 형식의 문자열로 디코딩한 경우일 수 있다.

대개는 utf-8, ascii, euc-kr 등의 형식으로 디코딩하면

문자 깨짐이 해결되는 경우가 많다.



5. JSON 인코딩

앞서 '인코딩'은 '컴퓨터가 처리하기 용이한 형태로 변환'하는 것이라고 했다.

그래서 JSON 인코딩이라고 하면

다루기 쉬웠던 파이썬 객체를 JSON 문자열 형태로 바꾸어주는 것을 의미한다.

아래와 같은 코드로 확인할 수 있다.

import json

data = {'name': '익명의 블로그'}
print(type(data))
# 

json_data = json.dumps(data)
print(type(json_data))
# 

json.dumps()는 다름이 아니라

파이썬 딕셔너리 자료형을 문자열로 바꾸어주는 것이었다.



6. JSON 디코딩

문자열로 된 JSON 문자열을 파이썬 딕셔너리로 바꾸어준다.

아래와 같이 변환할 수 있다.

json_data = json.dumps({'name': '익명의 블로그'})
print(type(json_data))
# 

parsing = json.loads(json_data)
print(type(parsing))
# 

json.loads()를 사용해서 JSON 문자열을 딕셔너리로 바꾸었다.

서버로부터 수신하는 JSON 문자열을 처리할 때엔

딕셔너리 형태로 바꾸어주어 처리하는 편이 더욱 편리하다.