본문 바로가기

Programing Language/Python

웹 통신에서 한글 깨짐 처리 %EA, utf-8

반응형

Prologue

과거에 파이썬 2에서는 유니코드 인식이 잘 되지 않아 한글 사용에 다양한 방법들이 필요했다. 하지만 파이썬3에서는 기본 인코딩이 utf-8로 채택이 되었고, 추가적인 설정 없이(?) 한글 사용이 편해졌다. plotting을 할 때는 글꼴을 바꿔서 추가적인 설정을 해주어야 하지만, 기본적으로 python상에서 한글을 사용하는데 큰 문제는 없다. 하지만, 보통 데이터 수집이나 웹통신을 하다 보면 한글이 있어야 할 자리에 흉악하게 생긴 것들을 볼 수 있다. 보통 한국어 관련 스크래핑을 하다 보면, 해당 주소의 url상에서 %EA%... 이렇게 수많은 %가 포함된 생긴 것을 볼 수 있다. 그냥 해도 무방한데, 특히 데이터파일을 받을 때 파일명에 저러한 문자가 섞여있는 경우, 적지않은 짜증이 올라오는 경우가 생긴다.

Cause

웹 통신의 기본 규격은 utf-8이 아닐 수 있다. post로 통신하는 경우는 문제가 없지만, get으로 통신하는 경우 그러한 이유로 종종 문제아닌 문제(?)를 겪을 수 있다. 검색어조차 모를 때에는 euc-kr 등등 다른 인코딩으로 열심히 머리를 싸매고 맨땅에 헤딩을 할 수 있는데, 이러한 인코딩 방식은 다음과 같은 여러가지 이름으로 부른다.

UTF-8 3byte 16진수 코드, charset utf-8, percent incoding, URL incoding 

How to

이는 통신상에서 url로 넘겨줄 때 발생하는 문제이기 때문에 관련 패키지인 urllib.parse.unquote_plus를 사용하면 된다.

Example

from urllib import parse

temp = '대한민국'

# utf-8 to charset utf-8
url_incoding = parse.quote_plus(temp)

# charset utf-8 to utf-8
utf_incoding = parse.unquote_plus(url_incoding)
반응형