我想将'β'转换为其单BIN代码'U + 03B2'使用代码。但是当我试图转换它时,我得到'63'作为它的整数值,这是'?'的值。字符。 它不会转换为正确的值。有没有什么办法可以得到'β'的正确值,即十进制'946',十六进制'03B2'。如何将特殊字符'β'转换为其Unicode码
我曾尝试:
int code = 'β';
byte[] b = { (byte)code };
String s = new String(b, "UTF-8");
我想将'β'转换为其单BIN代码'U + 03B2'使用代码。但是当我试图转换它时,我得到'63'作为它的整数值,这是'?'的值。字符。 它不会转换为正确的值。有没有什么办法可以得到'β'的正确值,即十进制'946',十六进制'03B2'。如何将特殊字符'β'转换为其Unicode码
我曾尝试:
int code = 'β';
byte[] b = { (byte)code };
String s = new String(b, "UTF-8");
这里是各种形式的值:
int code = 'β';
System.out.println(code); // 946 as an int
System.out.println(Integer.toString(code)); // 946 as a String
System.out.println(Integer.toHexString(code)); // 3b2
System.out.println(String.format("%04x", code)); // 03b2
System.out.println(String.format("%04x", code).toUpperCase()); // 03B2
(编辑:在看到其他的答案我现在知道,您可以使用格式字符串"%04X"
到直接以大写形式获得答案。)
如果UTF-8不是您的平台默认字符编码,您需要确保源文件以UTF-8格式保存编码,然后在编译时指定-encoding UTF-8
选项(或支持β
的其他字符编码)。
你的代码是错误的,因为你正在采取一个char
,这是16位,并将它砍成一半,只保留低8位。缩小的演员阵容可能会破坏数据;他们需要明确书写,让你思考你在做什么。
你的代码是这样的:
int code = 0x000003B2;
byte[] b = { 0xB2 };
的字节序列0xB2无效UTF-8,所以它与字符串s
在替换字符,�
(U + FFFD)解码。如果您的输出设备未配置为显示该字符,则会在输出?
上与替换字符交换。
如果你得到的编码在你的编辑器和编译器是正确的,这应该工作:
int code = 'β';
System.out.printf("U+%04X%n", code);
String s = "β";
int i = s.codePointAt(0);
System.out.printf("U+%04X", i);
我得到63 3F 003F 003F ? ? 作为输出 –
我无法解释这一点。我刚刚粘贴了我使用的确切代码,并对其进行了测试。 –
Unicode 003F是一个问号。也许由于某种原因,beta字符没有被识别,并被视为“?”。 –