Change summary
  src/main/java/eu/siacs/conversations/entities/Bookmark.java   | 15 ++++
src/main/java/eu/siacs/conversations/entities/MucOptions.java |  6 +-
2 files changed, 16 insertions(+), 5 deletions(-)
  Detailed changes
  
  
    
    @@ -192,8 +192,19 @@ public class Bookmark extends Element implements ListItem {
 	}
 
 	public Jid getFullJid() {
-		final String nick = getNick();
-		return jid == null || nick == null || nick.trim().isEmpty() ? jid : jid.withResource(nick);
+		return getFullJid(getNick(), true);
+	}
+
+	private Jid getFullJid(final String nick, boolean tryFix) {
+		try {
+			return jid == null || nick == null || nick.trim().isEmpty() ? jid : jid.withResource(nick);
+		} catch (final IllegalArgumentException e) {
+			try {
+				return tryFix ? getFullJid(gnu.inet.encoding.Punycode.encode(nick), false) : null;
+			} catch (final gnu.inet.encoding.PunycodeException e2) {
+				return null;
+			}
+		}
 	}
 
 	public List<Tag> getGroupTags() {
  
  
  
    
    @@ -110,7 +110,7 @@ public class MucOptions {
 
     void notifyOfBookmarkNick(final String nick) {
         final String normalized = normalize(account.getJid(),nick);
-        if (normalized != null && normalized.equals(getSelf().getFullJid().getResource())) {
+        if (normalized != null && normalized.equals(getSelf().getNick())) {
             this.tookProposedNickFromBookmark = true;
         }
     }
@@ -469,12 +469,12 @@ public class MucOptions {
         if (account == null || TextUtils.isEmpty(nick)) {
             return null;
         }
+
         try {
             return account.withResource(nick).getResource();
         } catch (IllegalArgumentException e) {
-            return null;
+            return nick;
         }
-
     }
 
     public String getActualNick() {