我试过这个循环遍历字符串中的字符并打印出来。除了Deseret Long I()之外,所有这些都打印得很好。我不知道是否有其他方法可以做到这一点,以便正确打印。这是我的代码:
package javaapplication13;
public class JavaApplication13 {
public static void main(String[] args) {
String s = "hy\u0500";
System.out.println(s);
final int length = s.length();
for (int offset = 0; offset < length;) {
final int codepoint = s.codePointAt(offset);
System.out.println((char) (codepoint));
offset += Character.charCount(codepoint);
}
}
}
输出看起来像这样(Netbeans):
run:
hyԀ
h
䍡
y
Ѐ
Ԁ
BUILD SUCCESSFUL (total time: 0 seconds)
答案 0 :(得分:0)
您的问题是由于您尝试将int
转换为char
(4个字节到2个字节)。在代理对的情况下,codepoint
变量中的值不能适合一个char
。看,它被称为对,因为它是一对字符。我认为最简单的打印方式是使用String.Substring()
方法。或者您可以通过以下方式将其转换为char数组:char[] ch = Character.toChars(codepoint);
并且您可以通过简单new String(ch)
将此数组转换回字符串。