I had the same problem with German "Umlaute".
The solution is pretty simple:
In Python 3+, urlencode allows to specify the encoding:
from urllib import urlencode
args = {}
args = {'a':1, 'en': 'hello', 'pt': u'olá'}
urlencode(args, 'utf-8')
>>> 'a=1&en=hello&pt=ol%3F'