[我几天来一直在寻找解决问题的方法,但是在Internet上查看以前回答的问题/博客/教程等时,找不到即时答案。
我的目标是编写一个程序,该程序将十进制数作为输入,然后计算十六进制数,并打印该十六进制数的Unicode符号(\ uXXXX)。我的问题是我无法将十六进制数“转换”为unicode。 (必须以这种格式编写:\ uXXXX)
示例:
输入:
122(=十进制)
输出:
十六进制:7A
Unicode:\ u007A | Unicode符号:拉丁小写字母“ z”
我唯一要做的就是打印unicode(\ u007A),但是我想要符号(“ z”)。我认为,如果unicode仅包含4个数字/字母,我只需要将十六进制“复制”到代码中,并用0填充其余位置,这样就可以了,但是正如我所说,我需要符号而不是代码。所以我尝试了又尝试,但是我无法获得符号。据我了解,如果您想要符号,则需要将其打印为字符串。但是当用字符串尝试时,出现错误“非法unicode转义”。
就像您只能打印预定的unicode,而不是就您的输入而言,当场生成的“随机”代码。
我刚接触Java了几天,所以如果我错过了任何东西,我深表歉意。
感谢您阅读。
U + 007A是3个字节的int 代码指针。
[\u007A
是UTF-16字符。
Unicode代码指针,符号有时会转换为两个char
,然后十六进制数字不一致。因此,最好使用代码指针。因为UTF-16只是一种用于两字节表示的编码方案,所以3字节Unicode数字的代理对不包含/
或此类字符(高位始终为1)。
int hex = 0x7A;
hex = Integer.parseUnsignedInt("007A", 16);
char ch = (char) hex;
String stringWith1CodePoint = new String(new int[] { hex }, 0, 1);
int[] codePoints = stringWith1CodePoint.codePoints().toArray();
String s = "𝄞"; // U+1D11E = "\uD834\uDD1E"