如何在 java 中找到符号的代理对

How to find the surrogate pair of a symbol in java

我想让and操作(⋀)符号出现,但是这个符号的unicode值是u+22C1(这可能是错误的,但根据我的阅读是这样的)。我发现另一个值是 2227,但打印出 ࢳ。如果可以,请解释查找代理对的方法,因为我必须找到更多符号才能找到它。

在 Java 中查找符号的代理对很简单,但有几个注意事项:

  • 并非所有字符都由代理对表示,包括您的示例(“⋀”),因此在尝试获取代理对之前始终检查这一点。
  • 您需要一种能够在源代码和代码生成的任何输出中显示符号的字体。我在 NetBeans 中使用了 Monospaced 代码和输出如下所示。

这是显示任意符号的一些基本 Unicode 信息的代码。它获取符号的代码点,确定它是否由代理对表示,如果是,则获取高代理和低代理。该代码处理两个符号,一个带有代理对(表情符号“”),另一个没有(您的“⋀”示例)。

package surrogates;

public class Surrogates {

    public static void main(String[] args) {
        Surrogates.displaySymbolDetails("️️");
        Surrogates.displaySymbolDetails("⋀️️");
    }

    static void displaySymbolDetails(String symbol) {
        int cp = symbol.codePointAt(0);
        String name = Character.getName(cp);
        System.out.println(symbol + " has code point " + cp + " (hex " + Integer.toHexString(cp) + ").");
        System.out.println(symbol + " has Unicode name " + name + ".");
        boolean isSupplemenetary = Character.isSupplementaryCodePoint(cp);
        if (isSupplemenetary) {
            System.out.println(symbol + " is a supplementary character.");
            char high = Character.highSurrogate​(cp);
            char low = Character.lowSurrogate​(cp);
            System.out.println(symbol + " has high surrogate: " + (int) high + ".");
            System.out.println(symbol + " has low surrogate: " + (int) low + ".");
        } else {
            System.out.println(symbol + " is in the BMP and therefore is not represented by a surrogate pair.");
        }
    }
}

这是输出:

️️ has code point 128522 (hex 1f60a).
️️ has Unicode name SMILING FACE WITH SMILING EYES.
️️ is a supplementary character.
️️ has high surrogate: 55357.
️️ has low surrogate: 56842.
⋀️️ has code point 8896 (hex 22c0).
⋀️️ has Unicode name N-ARY LOGICAL AND.
⋀️️ is in the BMP and therefore is not represented by a surrogate pair.

备注:

  • "symbol" 可以表示多种意思,但我假设在你的问题中你只是指一些 Unicode 字符。
  • 基本多语言平面 (BMP) 中的符号(即 Unicode 字符)不由代理项对表示。所有其他符号都在某个补充平面 (SMP) 中,并由代理对表示。