【问题标题】:Encode and Decode Emoji From editText in Android在 Android 中从 editText 编码和解码 Emoji
【发布时间】:2017-08-16 07:38:57
【问题描述】:

我正在尝试在我的 EditText 字段中使用表情符号。但问题是,当我尝试将表情符号转换为六进制时,值不正确。

我正在使用此函数在 Hexa 中获取 emoji 值。

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 hexa= String.valueOf(c);
                int code = (int)c;
                if(!(code >= 0 && code <= 255)){
                    hexa= "0x"+Integer.toHexString(c);
                }
                builder.append(unicode);
            }
            else{
                builder.append(c);
            }
        }
        Log.i(TAG, builder.toString());
    } catch (Exception e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    return builder.toString();
}

我尝试添加笑脸,它给了我价值0xd83d 这在下面的功能中不起作用。

这是将 Hexa 值转换为 Emoji 的功能,此功能运行良好,我尝试提供手动 Hexa 值。

        // 0xd83d this value is get from above function but not work
        // in this function 
        //String hexaCode = "0xd83d"; // not work
        String hexaCode = "0x1F60A"; // work
        int emoji= Integer.parseInt(hexaCode.substring(2), 16);
        reurn new String(Character.toChars(emoji));

你能告诉我我做错了什么吗?请不要向我推荐任何表情符号库。

【问题讨论】:

标签: android


【解决方案1】:

我解决了它,这对我来说很好。
这是代码。

public String escapeJavaString(String st){
    int ss1 = 0,ss2;
    Boolean high = true;
    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 = Integer.toHexString(c);
                    if(high){
                        high = false;
                        ss1 = Integer.parseInt(unicode, 16);
                    }else{
                        high = true;
                        ss2 = Integer.parseInt(unicode, 16);
                        char chars = Character.toChars(ss1)[0];
                        char chars2 = Character.toChars(ss2)[0];
                        int codepoint = Character.toCodePoint(chars, chars2);
                        unicode = "Ax" + codepoint;
                        builder.append(unicode);
                    }
                }
            }
            else{
                builder.append(c);
            }
        }
        Log.i(TAG, builder.toString());
    } catch (Exception e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    return builder.toString();
}

对于解码使用这个。

    int emoji= Integer.parseInt(hexaCode.substring(2));
    reurn new String(Character.toChars(emoji));

【讨论】:

    【解决方案2】:

    escapeJavaString(String st) 方法中,您将获得 unicode。您无法将其转换为 codePonit,只需在开始时添加 0x。看看this aswer,希望你找到关键

    【讨论】:

      【解决方案3】:
      String str = edText.getText().toString();
      String unicodeStr = StringEscapeUtils.escapeJava(str);
      

      您可以使用 commons-lang-2.5 jar 从 emoji 获取 Unicode

      如果要获取索引或十六进制值,则首先需要将字符串解析为 HTML 字符

      StringEscapeUtils.escapeHtml()
      

      或使用 emoji4j 库。

      例如:

      String line = "Hi , i am fine \uD83D\uDE02 \uD83D\uDE02, how r u ?";
      EmojiUtils.hexHtmlify(line); //Hi , i am fine &#x1f602; &#x1f602;, how r u ?
      

      这里 1f602 是您的十六进制代码。

      System.out.println(Character.toChars(Integer.parseInt("1f602",16)));
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-11-13
        • 1970-01-01
        • 2012-05-01
        • 1970-01-01
        • 2014-09-24
        相关资源
        最近更新 更多