如何从十六进制转换为 Unicode

本文关键字:Unicode 转换 十六进制 | 更新日期: 2023-09-27 18:33:51

我的应用程序从客户端接收十六进制值并转换回字符,通常是汉字。但我无法正确实现这一点。根据我当前的程序,它可以将"e5a682e4bd95313233"转换为"如何123",但我实际上从客户端收到"59824F55003100320033"相同的汉字"如何123",我的程序无法转换回字符串。请帮我解决这个问题。

这是我当前的代码:

        byte[] uniMsg = null;
        string msg = "59824F55003100320033";
        uniMsg = StringToByteArray(msg.ToUpper());
        msg = System.Text.Encoding.UTF8.GetString(uniMsg);

        public static byte[] StringToByteArray(String hex)
        {
          hex = hex.Replace("-", "");
          byte[] raw = new byte[hex.Length / 2];
          for (int i = 0; i < raw.Length; i++)
          {
             raw[i] = Convert.ToByte(hex.Substring(i * 2, 2), 16);
          }
          return raw;
        }

感谢对此的任何帮助。谢谢。

溶液:

更新

  msg = System.Text.Encoding.UTF8.GetString(uniMsg);

 msg  = System.Text.Encoding.BigEndianUnicode.GetString(uniMsg)

感谢@CodesInChaos建议编码类型。

如何从十六进制转换为 Unicode

它似乎没有用 UTF8 编码。请注意00 31 00 32 00 33部分。在 UTF8 中,它只是 31 32 33 .我认为十六进制字符串是 UTF16 BE,因为它每个字符正好是 2 个字节,并且它们是 00 填充的。将字节数组解码为 UTF16,您将获得一个字符串。然后,您可以将其用作字符串,或将其重新转换为所需的任何其他编码。