Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/214.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Android中对editText中的表情符号进行编码和解码_Android - Fatal编程技术网

在Android中对editText中的表情符号进行编码和解码

在Android中对editText中的表情符号进行编码和解码,android,Android,我正在尝试在我的EditText字段中使用表情符号。但问题是,当我试图将表情符号转换为六边形时,值是不正确的 我使用这个函数来获取六进制的表情符号值 public static String escapeJavaString(String st){ StringBuilder builder = new StringBuilder(); try { for (int i = 0; i < st.length(); i++) { cha

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

我使用这个函数来获取六进制的表情符号值

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();
}
你能告诉我我做错了什么吗。请不要让我参考任何表情符号库

转义字符串(String st)
方法中,您将获得unicode。您不能将其转换为codePonit,只需在开始时添加
0x
。看看,希望你能找到钥匙

String str = edText.getText().toString();
String unicodeStr = StringEscapeUtils.escapeJava(str);
您可以使用commons-lang-2.5jar从表情符号中获取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)));

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

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();
}

我想你们是在要求图书馆,请参考这里的讨论
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));