我的应用程序从客户端接收十六进制值并转换回通常是中文字符的字符。但我无法正确实施。根据我目前的程序,它可以将“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建议编码类型。
答案 0 :(得分:3)
它似乎不是用UTF8编码的。请注意00 31 00 32 00 33
部分。在UTF8中,它只是31 32 33
。我认为hexstring是UTF16 BE,因为每个字符正好是2个字节,它们是00填充的。将您的字节数组解码为UTF16,您将得到一个字符串。然后,您可以将其用作字符串,或将其重新转换为您需要的任何其他编码。