diff --git a/src/common/connection.py b/src/common/connection.py index 90ef64c00..05e0e224b 100644 --- a/src/common/connection.py +++ b/src/common/connection.py @@ -350,7 +350,7 @@ class Connection(ConnectionHandlers): self._hostname = hostname if use_srv: # add request for srv query to the resolve, on result '_on_resolve' will be called - gajim.resolver.resolve('_xmpp-client._tcp.' + h.encode('utf-8'), self._on_resolve) + gajim.resolver.resolve('_xmpp-client._tcp.' + helpers.unicode_to_ACE(h), self._on_resolve) else: self._on_resolve('', []) diff --git a/src/common/helpers.py b/src/common/helpers.py index d574bc009..ad39c6b22 100644 --- a/src/common/helpers.py +++ b/src/common/helpers.py @@ -25,6 +25,7 @@ import errno import select import sha from encodings.punycode import punycode_encode +from encodings import idna import gajim from i18n import Q_ @@ -85,6 +86,14 @@ def parse_jid(jidstring): return prep(*decompose_jid(jidstring)) +def unicode_to_ACE(host): + '''convert IDN (Internationalized Domain Names) to ACE (ASCII-compatible encoding)''' + labels = idna.dots.split(host) + converted_labels = [] + for label in labels: + converted_labels.append(idna.ToASCII(label)) + return ".".join(converted_labels) + def parse_resource(resource): '''Perform stringprep on resource and return it''' if resource: diff --git a/src/config.py b/src/config.py index 325a31a4a..59d21f997 100644 --- a/src/config.py +++ b/src/config.py @@ -2991,9 +2991,9 @@ class AccountCreationWizardWindow: '.') dialogs.ErrorDialog(pritext, sectext) return - server = widgets['server_comboboxentry'].child.get_text() + server = widgets['server_comboboxentry'].child.get_text().decode('utf-8') savepass = widgets['save_password_checkbutton'].get_active() - password = widgets['pass1_entry'].get_text() + password = widgets['pass1_entry'].get_text().decode('utf-8') if not self.modify: if password == '':