我正在尝试编写一种方法,以在给定特定代码页的情况下查找 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