【问题标题】:How to decode unicode to get Emoji/Smiley in android Edittext?如何在 android Edittext 中解码 unicode 以获取 Emoji/Smiley?
【发布时间】:2016-05-26 11:34:09
【问题描述】:

当我从 edittext 获取笑脸时,需要使其 Unicode 将其发送到服务器上。我使用以下代码获得了 Unicode:

public static String escapeJavaString(String st)
{
    StringBuilder builder = new StringBuilder();
    try {
        for (int i = 0; i < st.length(); i++) {
             char c = st.charAt(i);
             if(!Character.isLetterOrDigit(c) && !Character.isSpaceChar(c)&& !Character.isWhitespace(c) ){
                 String unicode = String.valueOf(c);
                 int code = (int)c;
                 if(!(code >= 0 && code <= 255)){
                     unicode = "\\\\u"+Integer.toHexString(c);
                 }
                 builder.append(unicode);
             }
             else{
                 builder.append(c);
             }
        }
        Log.i("Unicode Block", builder.toString());
    } catch (Exception e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    return builder.toString();
}

我得到输出为 '\ud83d\ude12' ,然后将其发送到服务器。在接收端,我从服务器得到了相同的结果,但是当将它放在 EditText 中时,它会以与上面输出相同的文本形式显示 Unicode,没有得到表情符号。它将如何解码它以在 EditText 中显示表情符号而不是 Unicode?

有人,有想法吗?

【问题讨论】:

  • 您是否尝试过对生成的字符串进行编码?
  • 是的,我通过使用问题讨论的 escapeJavaString 方法获得了高于 unicode 的信息。但无法从服务器再次解码或转换为笑脸

标签: android unicode decode emoji


【解决方案1】:

我得到了上述问题的解决方案。调用以下方法为 message.setText(unescapeJava(your_string));在 Edittext 中解码或取消转义 unicode 为笑脸

public static String unescapeJava(String escaped) {

    if (escaped.indexOf("\\u") == -1)
        return escaped;

    String processed = "";

    int position = escaped.indexOf("\\u");
    while (position != -1) {
        if (position != 0)
            processed += escaped.substring(0, position);
        String token = escaped.substring(position + 2, position + 6);
        escaped = escaped.substring(position + 6);
        processed += (char) Integer.parseInt(token, 16);
        position = escaped.indexOf("\\u");
    }
    processed += escaped;

    return processed;
}

【讨论】:

  • 太棒了……你太棒了。请接受您的回答。
  • 它不需要额外的库并且工作正常。谢谢
【解决方案2】:

看看Html.fromHtml See example

试试这个

editText.setText(Html.fromHtml("\ud83d\ude12"));

【讨论】:

  • Html.fromHtml 在我的情况下不起作用,因为我从服务器获得了 unicode \ud83d\ude12。但是,如果我按照你上面写的那样打印静态或特定的 unicode,那么它只会显示为笑脸。
  • 哦,你能告诉我你是如何显示那个 unicode 的吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-08-16
  • 2021-05-17
  • 2011-11-13
  • 2017-02-18
  • 1970-01-01
  • 1970-01-01
  • 2015-09-25
相关资源
最近更新 更多