JAVA:从字符串中获取UTF-8十六进制值?

时间:2012-03-14 17:15:45

标签: java utf-8 hex converter

我希望能够将原始UTF-8字符串转换为十六进制字符串。 在下面的示例中,我创建了一个包含2个字母的样本UTF-8字符串。 然后我试图获得十六进制值,但它给出了负值。

我怎样才能让它 05D0 05D1

String a = "\u05D0\u05D1";
byte[] xxx = a.getBytes("UTF-8");

for (byte x : xxx) {
   System.out.println(Integer.toHexString(x));
}

谢谢。

2 个答案:

答案 0 :(得分:5)

如果您需要代码点,请不要转换为UTF-8等编码。使用Character.codePointAt

例如:

Character.codePointAt("\u05D0\u05D1", 0) // returns 1488, or 0x5d0

答案 1 :(得分:3)

出现负值是因为byte的范围是-128到127.以下代码将产生正值:

String a = "\u05D0\u05D1";
byte[] xxx = a.getBytes("UTF-8");

for (byte x : xxx) {
    System.out.println(Integer.toHexString(x & 0xFF));
}

主要区别在于它输出x & 0xFF而非x,此操作会将byte转换为int,并删除该符号。