如何将特殊字符'β'转换为其unicode

时间:2016-03-21 14:58:13

标签: java utf-8 hex decimal

我想使用代码将'β'转换为其uni-code 'U + 03B2'。但是当我尝试转换它时,我得到'63'作为其整数值,即'?'字符的值。 它没有转换为正确的值。有没有办法得到'β'的正确值,即十进制'946',十六进制'03B2'

我试过了:

   int code = 'β';
   byte[] b = { (byte)code };
   String s = new String(b, "UTF-8");

3 个答案:

答案 0 :(得分:2)

以下是各种形式的价值:

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"直接以大写形式获得答案。)

答案 1 :(得分:2)

如果UTF-8不是您的平台默认字符编码,则您需要确保源文件以UTF-8编码保存,然后在编译时指定-encoding UTF-8选项(或另一个支持β}的字符编码。

你的代码是错误的,因为你正在取{16}的char,并将其斩半,只保留低8位。缩小的演员表会破坏数据;他们必须明确写出来让你思考你在做什么。

您的代码是这样的:

int code = 0x000003B2;
byte[] b = { 0xB2 };

字节序列0xB2不是有效的UTF-8,因此它使用字符串中的替换字符s(U + FFFD)进行解码。如果您的输出设备未配置为显示该字符,则它将与输出?上的其他替换字符交换。

如果您在编辑器和编译器中获得了正确的编码,那么这应该可行:

int code = 'β';
System.out.printf("U+%04X%n", code);

答案 2 :(得分:1)

this.props.toggleMenuBoolean(false)