我正在尝试在EditText
字段中使用表情符号。但问题是,当我尝试将表情符号转换为六进制时,该值不正确。
我正在使用此函数在Hexa中获取表情符号值。
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值转换为表情符号的功能,此功能正常工作我尝试提供手动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));
你能告诉我我做错了什么吗?请不要将我推荐给任何表情符号库。
答案 0 :(得分:2)
我解决了,这对我来说很好。
这是代码。
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));
答案 1 :(得分:0)
在escapeJavaString(String st)
方法中,您获得了unicode。您无法在开始时添加0x
将其转换为codePonit。看看https://github.com/uber/react-vis/blob/master/showcase/sunbursts/sunburst-with-tooltips.js,希望找到一个关键
答案 2 :(得分:0)
String str = edText.getText().toString();
String unicodeStr = StringEscapeUtils.escapeJava(str);
您可以使用commons-lang-2.5 jar
从表情符号中获取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)));