public class UnicodeDecoder {
public static String decodeToUnicodeCodePoints(String input) {
StringBuilder builder = new StringBuilder();
for (int i = 0; i < input.length(); i++) {
int codePoint = input.codePointAt(i);
builder.append(String.format("U+%04X ", codePoint));
// Move index to the next character if the current character is part of a surrogate pair
if (Character.isHighSurrogate(input.charAt(i))) {
i++;
}
}
return builder.toString();
}
public static void main(String[] args) {
String input = "ABC ";
String decodedString = decodeToUnicodeCodePoints(input);
System.out.println(decodedString);
}
}
IntStream
码点数量正如所评论的,您应该处理由返回的代码点整数流
String#codePoints
。使用十六进制数字定义所需输出的格式字符串。
循环这些代码点
int
值,为每个代码点值生成文本。您可以使用 收集这些输出
StringBuilder
。或者将所有这些放在一行中:
请参阅在 Ideone.com 上运行的此代码。
请注意,文本是一个复杂的问题。
对于人类读者来说,看起来像一个字符的实际上可能是多个代码点的组合。例如,带有一个或多个变音符号的字母。另一个例子是以自然肤色描绘人体部位的表情符号。因此,您可以拥有比明显字符更多的代码点。
要了解更多信息,请在 Wikipedia 上查找术语,例如代码点、字素、字形、变音符号、连字。
在 Java 中,您可以通过迭代字符串中的每个字符,使用 Character.codePointAt() 方法将其转换为其 Unicode 代码点,然后根据需要对其进行格式化来实现此目的。