Java - 从unicode转换为字符串?

时间:2015-12-20 16:36:48

标签: java string unicode character

我可以轻松创建一个unicode字符,并使用以下代码行打印它

String uniChar = Character.toString((char)0000);
System.out.println(uniChar);

但是,现在我想检索上面的数字,添加3,并打印出数字0003对应的新unicode字符。有没有办法让我检索unichar的ACTUAL字符串?如在“\ u0000”中?这样我就可以只对“0000”进行子串,将其转换为int,添加3,并反转整个过程。

2 个答案:

答案 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);