urllib의 urlopen이나 urlretrieve를 사용할 때 url안에 한글 코드가 들어가 있는 경우 정확하게 url을 encoding 해주지 않으면 Unicode Error가 발생한다.
한글이 들어간 url은 unicode이고 url은 ascii여야 하기 때문에 한글이 들어간 원 url은 'utf8'로 encoding되어야 하고 ascii가 아닌 문자들은 quote되어야 한다.
quote함수를 사용할 때 host part 부분은 escape되면 안되므로 escape되지 않아야 할 character에 '/', ':'를 지정한다.
url = u'http://localhost/test/한글message.html'
urllib.urlretrieve(urllib.quote(url.encode('utf8'), '/:'))
P.S. 이 간단한 코드를 test하는데 반나절이나 시간이 걸렸다. 위의 참고 page를 보면 알겠지만 python에서 unicode 문제는 고질적이라고 할 수 있다. python은 아직까지 default encoding이 ascii이기 때문에 unicode error는 어디서나 갑자기 튀어나오고, 이 문제는 unicode의 메카니즘에 대해 알고 있어도 쉽게 해결하기 어렵다. unicode error를 발생시킨 library 코드를 이해해야 하기 때문이다. python 3.0이 정식으로 나오면 이런 문제가 해결되기를 기대해 본다.
댓글 없음:
댓글 쓰기