2008-11-12

urllib unicode handling

참고: http://mail.python.org/pipermail/python-dev/2008-May/079198.html

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이 정식으로 나오면 이런 문제가 해결되기를 기대해 본다.

댓글 없음: