我可以轻松创建一个unicode字符,并使用以下代码行打印它
String uniChar = Character.toString((char)0000);
System.out.println(uniChar);
但是,现在我想检索上面的数字,添加3,并打印出数字0003对应的新unicode字符。有没有办法让我检索unichar的ACTUAL字符串?如在“\ u0000”中?这样我就可以只对“0000”进行子串,将其转换为int,添加3,并反转整个过程。
答案 0 :(得分:0)
Unicode是“字符”的编号 - 代码点 - 最多3个字节的int范围。
UTF-16编码使用一系列字节对,而java char 就是这样一个字节对。 char的(int)
强制转换是不完美的,仅涵盖Unicode的一部分。将代码点转换为可能多个char的正确方法:
int codePoint = 0x263B;
char[] chars = Character.chars(codePoint);
要使用Unicode代码点,可以执行以下操作:
int[] codePoints = {0x2639, 0x263a, 0x263b};
String s = new String(codePoints, 0, codePoints.length);
codePoints[0} += 2;
您的代码使用1个代码点的int数组。
在java 8中,可以获得代码点的IntStream:
s.codePoints().forEach(cp -> {
System.out.printf("U+%X = %s%n", cp, Character.getName(cp));
};
答案 1 :(得分:0)
对于从Unicode BMP和Unicode补充窗格(使用UTF-8中的4个字节对字符进行编码)的Unicode代码点而言,此代码均适用。 4字节代码点需要存储2个Java char实体,因此在这种情况下string.length()= 2。
// array will contain one or two characters
char[] chars = Character.toChars(codePoint);
// string.length will be 1 or 2
String str = new String(chars);