我需要创建一个带有unicode符号的字符串。我这样做了:
StringBuffer sb = new StringBuffer();
sb.append(StringEscapeUtils.unescapeJava("\\u1F1EB"));
sb.append(StringEscapeUtils.unescapeJava("\\u1F1F7"));期待一个国家的标志,但我havent..How,我可以得到一个字符串的unicode国旗符号符号与独角兽字符?
发布于 2014-10-07 08:30:43
您应该能够简单地使用来自java.lang.Character的java.lang.Character来实现这一点。
这对我来说很管用:
StringBuffer sb = new StringBuffer();
sb.append(Character.toChars(127467));
sb.append(Character.toChars(127479));
System.out.println(sb);打印,客户端可以选择将其显示为法国国旗,或以其他方式。
发布于 2014-10-07 08:38:52
问题是,"\uXXXX“表示法用于4个十六进制数字,形成16位char。
您的Unicode代码点高于16位范围,包括U+F1EB和U+1F1F7。这将用两个字符表示,这是一个所谓的代理项对。
您可以使用代码点创建字符串:
int[] codepoints = {0x1F1EB, 0x1F1F7};
String s = new String(codepoints, 0, codepoints.length);或者使用代孕项对,可以这样派生:
System.out.print("\"");
for (char ch : s.toCharArray()) {
System.out.printf("\\u%04X", (int)ch);
}
System.out.println("\"");给予
"\uD83C\uDDEB\uD83C\uDDF7"对评论的响应:如何解码
"\uD83C\uDDEB“是代表U+1F1EB的两个代理16位字符,”\uD83C\uDDF7 7“是U+1F1F7的代理项对。
private static final int CP_REGIONAL_INDICATOR = 0x1F1E7; // A-Z flag codes.
/**
* Get the flag codes of two (or one) regional indicator symbols.
* @param s string starting with 1 or 2 regional indicator symbols.
* @return one or two ASCII letters for the flag, or null.
*/
public static String regionalIndicator(String s) {
int cp0 = regionalIndicatorCodePoint(s);
if (cp0 == -1) {
return null;
}
StringBuilder sb = new StringBuilder();
sb.append((char)(cp0 - CP_REGIONAL_INDICATOR + 'A'));
int n0 = Character.charCount(cp0);
int cp1 = regionalIndicatorCodePoint(s.substring(n0));
if (cp1 != -1) {
sb.append((char)(cp1 - CP_REGIONAL_INDICATOR + 'A'));
}
return sb.toString();
}
private static int regionalIndicatorCodePoint(String s) {
if (s.isEmpty()) {
return -1;
}
int cp0 = s.codePointAt(0);
return CP_REGIONAL_INDICATOR > cp0 || cp0 >= CP_REGIONAL_INDICATOR + 26 ? -1 : cp0;
}
System.out.println("Flag: " + regionalIndicator("\uD83C\uDDEB\uD83C\uDDF7"));
Flag: EQ发布于 2014-10-08 03:05:46
如果您想经常使用emojis,最好使用一个库来为您处理unicode内容:emoji java。
您只需添加maven依赖项:
<dependency>
<groupId>com.vdurmont</groupId>
<artifactId>emoji-java</artifactId>
<version>1.0.0</version>
</dependency>然后调用EmojiManager:
Emoji emoji = EmojiManager.getForAlias("fr");
System.out.println("HEY: " + emoji.getUnicode());支持的所有表情符号列表都是这里。
https://stackoverflow.com/questions/26231263
复制相似问题