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