在 Java 中查找给定扩展 ASCII 代码点和代码页的等效 Unicode 代码点?



我正在尝试编写一种方法,以在给定特定代码页的情况下查找 Unicode 中具有相同视觉字符的 ASCII 中的等效代码点

例如,给定一个字符 saychar c = 128,在 Windows-1252 代码页中为"€",运行该方法

int result = asUnicode(c, "windows-1252")

应该给出8364或相同的char c = 128,即Windows-1251代码页中的"Ђ",运行该方法

int result = asUnicode(c, "windows-1251")

应该给1026

如何在Java中做到这一点?

c实际上不应该是一个char,而是相应编码中的byte[]字节,例如Windows-1252。

对于这个简单的案例,我们可以自己将char包装成byte[]

您需要将这些字节解码为 Java 的char类型,该类型表示 BMP 代码点。然后返回相应的一个。

public static int asUnicode(char c, String charset) throws Exception {
CharBuffer result = Charset.forName(charset).decode(ByteBuffer.wrap(new byte[] { (byte) c }));
int unicode;
char first = result.get();
if (Character.isSurrogate(first)) {
unicode = Character.toCodePoint(first, result.get());
} else {
unicode = first;
}
return unicode;
}

以下

public static void main(String[] args) throws Exception {
char c = 128;
System.out.println(asUnicode(c, "windows-1252"));
System.out.println(asUnicode(c, "windows-1251"));
}

指纹

8364
1026

最新更新