从十六进制获取Unicode

问题描述 投票:0回答:1

[我几天来一直在寻找解决问题的方法,但是在Internet上查看以前回答的问题/博客/教程等时,找不到即时答案。

我的目标是编写一个程序,该程序将十进制数作为输入,然后计算十六进制数,并打印该十六进制数的Unicode符号(\ uXXXX)。我的问题是我无法将十六进制数“转换”为unicode。 (必须以这种格式编写:\ uXXXX)

示例:

输入:

122(=十进制)

输出:

十六进制:7A

Unicode:\ u007A | Unicode符号:拉丁小写字母“ z”

我唯一要做的就是打印unicode(\ u007A),但是我想要符号(“ z”)。我认为,如果unicode仅包含4个数字/字母,我只需要将十六进制“复制”到代码中,并用0填充其余位置,这样就可以了,但是正如我所说,我需要符号而不是代码。所以我尝试了又尝试,但是我无法获得符号。据我了解,如果您想要符号,则需要将其打印为字符串。但是当用字符串尝试时,出现错误“非法unicode转义”。

就像您只能打印预定的unicode,而不是就您的输入而言,当场生成的“随机”代码。

我刚接触Java了几天,所以如果我错过了任何东西,我深表歉意。

感谢您阅读。

java unicode hex unicode-escapes unicode-literals
1个回答
1
投票

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"

0
投票

您可以简单地使用System.out.printfSystem.out.printf做您想做的事。

示例:

String.format

输出:

String.format
© www.soinside.com 2019 - 2024. All rights reserved.