【发布时间】:2020-01-15 22:17:43
【问题描述】:
我有许多十六进制数:35 d8 de de de de 43 f2 71 84 4b f3 be 4d 4d 65 4a 17 41 bb 40 a5 85 c4 bd fd 7a 4e fb 24 27 4e
这是 32 字节!
我这样做:
String b = "35d8dededede43f271844bf3be4d4d654a1741bb40a585c4bdfd7a4efb24274e";
byte[] bytes = fromHex(b);
String st = new String(bytes, StandardCharsets.UTF_8);
System.out.println(bytes.length); // 32
System.out.println(st.length()); // 30
private static byte[] fromHex(String hex)
{
byte[] binary = new byte[hex.length() / 2];
for(int i = 0; i < binary.length; i++)
{
binary[i] = (byte)Integer.parseInt(hex.substring(2*i, 2*i+2), 16);
}
return binary;
}
我得到了答案:
32
30
但我希望得到一个 32 UTF-8 字符串!为什么我得到一个 30 个字符的字符串?如何获得 32 个 UTF-8 字节?
【问题讨论】:
-
该 32 字节序列不代表有效的 UTF-8 编码字符串。例如,字节
d8 de de de de不是有效的 UTF-8。你从哪里得到十六进制字符串?