编程语言
首页 > 编程语言> > c#-.NET从十六进制值的字符串转换为Unicode字符(支持不同的代码页)

c#-.NET从十六进制值的字符串转换为Unicode字符(支持不同的代码页)

作者:互联网

我有一串十六进制值…

String hexString = "8A65";

我需要将此字符串转换为它们的Unicode等效项.棘手的部分是我需要支持不同的代码页,并且某些代码页的’8A65’=一个字符,而其他代码页会将其转换为两个字符.

在需要执行转换之前,我不知道将使用哪个代码页.

我尝试过各种东西,例如

byte[] original = Encoding.Unicode.GetBytes(hexString);
byte[] conv= Encoding.Convert(Encoding.Unicode, Encoding.GetEncoding(932), orig);
char[] chars = Encoding.GetEncoding(932).GetChars(conv);

注意:代码页932是日语

string hexString = "8A65";
int length = hexString.length;
byte[] bytes = new byte[length / 2];

for (int i = 0; i < length; i += 2)
{
    bytes[i / 2] = Convert.ToByte(hexString.Substring(i, 2), 16);
}

char[] chars = Encoding.GetEncoding(932).GetChars(bytes);

谢谢pstrjds,您是救生员!

解决方法:

您需要将十六进制字符串转换为字节(请参见SO post).将十六进制字符串传递给其中一种编码以将其转换为字节,只会给您这些字符的等效字节.我假设您想要的是4字符串代表的两个字节,因此将十六进制解码为字节,然后可以对解码后的字节使用编码来获取字符串.

Encoding.{YourEncoding}.GetChars(hexBytes);

标签:decoding,encoding,globalization,c
来源: https://codeday.me/bug/20191202/2084652.html