在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 😂 😂, 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));