web-dev-qa-db-ja.com

絵文字のユニコードフラグの国で文字列を作成する

国旗のユニコード絵文字で文字列を作成する必要があります。これを行いました:

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

1つの国旗が必要ですが、私は持っていません。Unicode文字を含む文字列でUnicode国旗の絵文字を取得するにはどうすればよいですか?

13
colymore

Java.lang.CharactertoCharsを使用するだけでそれができるはずです。

これは私にとってはうまくいきます:

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

クライアントは????????を出力します 選択可能 フランスの旗のように表示 または他の方法

10
leo

問題は、「\ uXXXX」表記が4つの16進数であり、16ビットcharを形成することです。

Unicodeコードポイントがある上記 16ビット範囲、U + F1EBとU + 1F1F7の両方。これは、2つの文字、いわゆるサロゲートペアで表されます。
コードポイントを使用して文字列を作成できます:

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を表す2つのサロゲート16ビット文字で、「\ uD83C\uDDF7」は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
22
Joop Eggen

絵文字を頻繁に使用したい場合は、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());

サポートされている絵文字の完全なリストは here です。

5
Vincent Durmont

あなたはこのようなことを達成したいと思います

enter image description here

国旗のユニコードの2つの例を挙げましょう。

ルーマニア--->\uD83C\uDDF7\uD83C\uDDF4

アメリカの場合--->\uD83C\uDDFA\uD83C\uDDF8

このサイトから、これと他の国のフラグのユニコードを取得できます Emoji Unicodes

サイトに入ると、絵文字の多いテーブルが表示されます。その表からFLAGSの付いたタブを選択すると(簡単に見つけることができます)、すべての国旗が表示されます。リストからフラグを1つ選択する必要があります。必要なフラグは1つだけです。その後、メッセージボックスにテキストコードが表示されます...それは重要ではありません。重要なのは、選択した旗の旗と国名が表示されるサイトの右側を見る必要があることです。その上でクリックし、開いたページでEmoji Character Encoding Dataという名前の表を見つける必要があります。テーブルの最後の部分までスクロールします。sais:C/C++/Java Src ..そこに正しいユニコードフラグが表示されます。注意、常にそのような長いユニコードを選択してください。注意しない場合は、それほど長くない単純なユニコードを選択することができます。

適応症画像1

enter image description here

表示画像2

enter image description here

最後に、私はAndroid私のアプリ$ Javaと同じように動作する)からサンプルコードを投稿します。

ArrayList<String> listLanguages = new ArrayList<>();
    listLanguages.add("\uD83C\uDDFA\uD83C\uDDF8  " + getString(R.string.English));
    listLanguages.add("\uD83C\uDDF7\uD83C\uDDF4  " + getString(R.string.Romanian));

別の簡単なカスタム例:

String flagCountryName = "\uD83C\uDDEF\uD83C\uDDF2 Jamaica";

この変数は、必要な場所で使用できます。これにより、テキストの前にジャマイカの旗が表示されます。

あなたが何かを理解していない場合は、これがすべてです。

2