2014-10-07 29 views
6

我需要創建一個國家標誌的Unicode emoji..I做這樣的字符串:創建的表情符號標誌的unicode字符串的國家

StringBuffer sb = new StringBuffer(); 
sb.append(StringEscapeUtils.unescapeJava("\\u1F1EB"));  
sb.append(StringEscapeUtils.unescapeJava("\\u1F1F7")); 

期待一個國家的國旗,但我havent..How我能得到一個Unicode國旗中的表情符號與Unicode字符串?

+0

如果不是,你得到了什麼? – leo 2014-10-07 08:08:49

+0

你以後做了什麼? 「StringEscapeUtils.unescapeJava」調用背後的想法是什麼? – weston 2014-10-07 08:11:30

+0

Im getting἞E἟9἟7἟A – colymore 2014-10-07 08:11:33

回答

6

您應該可以簡單地使用​​從java.lang.Character

這個工作對我來說:

StringBuffer sb = new StringBuffer(); 
    sb.append(Character.toChars(127467)); 
    sb.append(Character.toChars(127479)); 
    System.out.println(sb); 

打印,其中客戶端can chose to顯示像法國國旗,or in other ways

-3

Creating Unicode character from its number

不能讓我的機器打印的Unicode在你那裏,但其他值它的工作原理。

+0

這適用於我當我用在簡單的unicode字符,但標誌unicodes被兩個unicodes compused .. – colymore 2014-10-07 08:29:00

+0

在2 upvoted答案中提到的一切,已經在我提供的鏈接。不明白爲什麼我會陷入低谷。 – Thomas 2014-10-08 09:10:01

14

問題是,「\ 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和 「\ uD83C \ uDDF7」 兩個替代16個的字符是代理對爲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 
+0

你也很實在。 – colymore 2014-10-07 08:43:02

+0

嘿@Joop請告訴我如何解碼這個「\ uD83C \ uDDEB \ uD83C \ uDDF7」。謝謝你的代碼。 – 2014-10-13 14:04:18

+0

@RobinRoyal如何從字符串中獲得「EQ」擴展答案。 – 2014-10-13 14:58:54

4

如果你想經常使用的表情符號,它可以很好的使用,將處理該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()); 

支持的完整列表ed emojis是here

+0

謝謝@Vincent圖書館! – 2016-11-11 17:14:11

相關問題