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