【问题标题】:Hex-string to UTF-8-string in JavaJava中的十六进制字符串到UTF-8字符串
【发布时间】: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。你从哪里得到十六进制字符串?

标签: java string utf-8


【解决方案1】:

为什么我得到一个 30 个字符的字符串?

该字符串中有字节序列,因此在从 UTF-8 解码时,多个字节将转换为单个 Unicode 代码点。

如何获得 32 个 UTF-8 字节。

我们不能。是 30 个字符的 UTF-8 字符串吗?

无论如何,说“UTF-8 字节”是错误的。它们不再是字节。

【讨论】:

    猜你喜欢
    • 2017-03-04
    • 2012-03-31
    • 1970-01-01
    • 2020-10-26
    • 2010-10-04
    • 2014-03-07
    • 1970-01-01
    • 2013-04-12
    • 1970-01-01
    相关资源
    最近更新 更多