如何在android中编码和解码表情符号?

如何在android中编码和解码表情符号?,android,emoji,Android,Emoji,我在应用程序中使用了library。当我在代码中传递一个静态unicode字符串时,表情符号是可见的,但是如果我使用常规get-webservice将表情符号发送到php服务器并检索该字符串,那么它只是在我的应用程序中显示unicode字符串。如果比较,静态字符串和服务器检索的字符串都是相同的 谁能告诉我我的申请有什么问题吗。同样的应用程序是在IOS中开发的,他们所做的是在发送到服务器时首先将字符串编码为ASCII>UTF-8。 然后,他们以发送的相同方式解码字符串。有谁能告诉我这是否也与and

我在应用程序中使用了library。当我在代码中传递一个静态unicode字符串时,表情符号是可见的,但是如果我使用常规get-webservice将表情符号发送到php服务器并检索该字符串,那么它只是在我的应用程序中显示unicode字符串。如果比较,静态字符串和服务器检索的字符串都是相同的

谁能告诉我我的申请有什么问题吗。同样的应用程序是在IOS中开发的,他们所做的是在发送到服务器时首先将字符串编码为ASCII>UTF-8。 然后,他们以发送的相同方式解码字符串。有谁能告诉我这是否也与android兼容,如果是,那么我该怎么做。

我们可以使用commons lang(commons-lang-2.5.jar)库对unicode字符进行编码和解码。下载jar文件或使用gradle:
编译“org.apache.commons:commons-lang3:3.4”

用于编码使用-
StringEscapeUtils.escapeJava(字符串文本)
这可以在android的
EditText
调用
getText
方法时使用,在发送到web服务器之前,它将正确编码unicode字符

解码使用-
StringEscapeUtils.unescapeJava(字符串文本)
这可以在android
TextView
setText
中使用,在收到web服务器的响应后,它将正确解码unicode字符


Ex:

EditText etEmojiEditText = new EditText(this);
etEmojiEditText.setText("TYPE SOMETHING IN EMOJI");

String toServer = etEmojiEditText.getText();
String toServerUnicodeEncoded = StringEscapeUtils.escapeJava(toServer);

String serverResponse = "SOME RESPONSE FROM SERVER WITH UNICODE CHARACTERS";
String fromServerUnicodeDecoded = StringEscapeUtils.unescapeJava(serverResponse);

供参考也使用web服务端的编码和解码。Unicode编码的字符串应该从web服务中解码,来自web服务的响应应该在发送到客户端之前进行编码服务器表应该包含utf8mb4而不是utf8,因为unicode字符每个字符需要4字节。因此,unicode将不会以3字节表示。

我在表情符号中使用了与您相同的库。 我使用URLEncoder.encode(commentString,“UTF-8”)进行编码,类似地, 解码(encodedComment,“UTF-8”)用于解码


对我来说很合适。希望你也是。

我正在使用相同的库。。。你不需要对表情符号进行编码或转义。。。只需getText().toString()就可以了

按照步骤进行操作

在mysql中,将字段排序规则更改为
utf8mb4\u unicode\u ci
(我的数据库和表排序规则为utf8\u unicode\u ci)

在服务器上使用了PHP Codigniter,因此数据库配置

'char_set' => 'utf8mb4',
'dbcollat' => 'utf8mb4_unicode_ci'

然后在Android中使用
textView.getText().toString()
然后发送文本,而不使用任何编码或转义

在我的情况下,消息中的所有文本在符号和+后消失,因此我决定在发送之前和接收之后替换它们,这对我来说很好

private String encodeMessage(String message) {
    message = message.replaceAll("&", ":and:");
    message = message.replaceAll("\\+", ":plus:");
    return StringEscapeUtils.escapeJava(message);
}

private String decodeMessage(String message) {
    message = message.replaceAll(":and:", "&");
    message = message.replaceAll(":plus:", "+");
    return StringEscapeUtils.unescapeJava(message);
}
您可以在不使用中的任何库的情况下对表情符号进行编码和解码 android,如果您从服务器接收unicode

例如:

U+1F601 is 16 bit unicode.
U+
替换为
0x

  int originalUnicode=0x1F601;
  textView.setText(getEmoticon(originalUnicode));


  public String getEmoticon(int originalUnicode) {
    return new String(Character.toChars(originalUnicode));
}

Emojis
需要编码和解码。您应该通过编码将文本发送到服务器,并通过解码将其再次显示在
应用程序中。下面是加密和解密的代码

public static String encodeEmoji (String message) {
try {
return URLEncoder.encode(message,
"UTF-8");
} catch (UnsupportedEncodingException e) {
return message;
}
}


public static String decodeEmoji (String message) {
String myString= null;
try {
return URLDecoder.decode(
message, "UTF-8");
} catch (UnsupportedEncodingException e) {
return message;
}
} 

在整个内容中将unicode转换为表情符号,无需使用任何库

private String convertEmoji(String content) {
    content = content.replaceAll("U\\+", "0x");
    String keyword = "0x";

    int index = content.indexOf(keyword);
    int spaceIndex;

    while (index >=0){
        spaceIndex = content.indexOf(" ", index);

        if(spaceIndex > index) {
            String emoji = content.substring(index, spaceIndex);
            content = content.replaceAll(emoji, getEmoticon(Integer.decode(emoji)));
        }
        index = content.indexOf(keyword, index+keyword.length());
    }

    return content;
}

@AvinashBabu:-需要安卓系统,并且知道如何编码和解码bcz必须发送到服务器上,所以请给我一些建议……ThanksHey@Vishnu你找到如何将表情符号发送到服务器了吗?提前谢谢。我也在使用相同的库来处理表情符号。我正在使用字符串将表情符号编码为unicode字符TOSERVERUNICODENCODE=StringEscapeUtils.escapeJava(toServer),并使用SERVERUNICODEDECODE=StringEscapeUtils.unescapeJava(serverResponse)中的字符串进行解码。在EmojiconTextView中显示解码后的表情符号时,unicode已显示。其对应的表情符号未显示。请帮助我解决此问题。我在此库中遇到IllegalArgumentException:unicode值中少于4个十六进制数字:'\u062'由于CharSequenceEnd的原因compile'org.apache.commons:commons-lang3:3.4'的更新版本,即3.7已弃用StringEscapeUtils。使用实现“org.apache.commons:commons text:1.3”而不是编译“org.apache.commons:commons-lang3:3.4”。并确保从org.apache.commons:commons text:1.3AWESOME导入StringEscapeUtils。经过3个小时的研究:数据工作正常,但没有提供正确的unicode请解释“没有提供正确的unicode”,您是否没有得到“UTF-8”格式的数据?你是如何确定你没有得到utf-8的编码的?我也写过,它只是用于编码工作良好,但在这种情况下,获得可以被其他应用程序使用的本机表情文字是不可能的。这里首先你编码的文字,包括表情。任何其他地方如果你解码内容,你会得到相同的表情符号,只要其他地方也支持utf-8。你能帮我把“5794d5f7895fa10a8f8e1357”转换成表情符号@NeerajShukla Thanks如果我的
originalUnicode
是字符串形式的int怎么办?@Dennis,解析成int然后
Character.toChars(yourInt)
我的意思是,如果我的服务器以字符串形式向我发送表情代码,例如
“U+1F601”
,该怎么办。如何将其解析为
int
Integer.ParseInt()在这里不起作用。
getEmoticon
方法是什么?它是什么牌子的?