ISO-8859-1 only encodes characters less than U+FFFF. You are trying to encode U+1F603, which is higher than U+FFFF. You have that character in a Java string. Java strings are UTF-16 inherently, which is why it looks like you have two characters. That one codepoint, U+1F603, is in your Java string as two halves, known as a "surrogate pair" (see: en.wikipedia.org/wiki/UTF-16 for more info). Your XMPP library is responsible for turning UTF-16 strings into UTF-8 in order to produce valid XMPP. If it's not, you either have to fix the library or get someone else to fix it.