簡體   English   中英

Java 中的十六進制字符串到 UTF-8 字符串

[英]Hex-string to UTF-8-string in Java

我有一個十六進制數: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 字節?

為什么我得到一個 30 個字符的字符串?

該字符串中有字節序列,因此當從 UTF-8 解碼時,多個字節被轉換為單個 Unicode 代碼點。

我怎樣才能得到 32 個 UTF-8 字節。

我們不能。 它是一個 30 個字符的 UTF-8 字符串?

無論如何說“UTF-8 字節”是錯誤的。 它們不再是字節了。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM