Encoding.UTF8.GetBytes似乎插入了一个伪字节
本文关键字:一个 字节 GetBytes UTF8 插入 Encoding | 更新日期: 2023-09-27 17:50:52
我有以下代码,从旧的VB6程序转换为c#。VB6使用了旧的Winsock,它可以接受字符串参数,但是c#程序使用System.Net.Socket which
想要一个byte
数组。
byte[] msg = Encoding.UTF8.GetBytes(tempString);
_TCPConn.Send(msg);
tempString
有
0x0002 (' ')
0x0000 (''0')
0x0000 (''0')
0x0000 (''0')
0x0080 (' ')
0x006d ('m')
0x0068 ('h')
但是msg
得到一个额外的字节
0x02
0x00
0x00
0x00
**0xc2**
0x80
0x6d
0x68
"c2"是从哪里来的?
这就是UTF8所做的。从0x80到0x7FF的值用2字节编码。从0x800到0xFFFF的值用3字节编码。0xC2 0x80告诉解码器只输出0x80。
编辑:如果接收者只期望每个字符的低字节和字符值0x80-0xFF是有效的,您将不得不一次转换每个字符一个。
int len = tempString.Length;
byte[] msg = new byte[len];
for ( int idx = 0; idx < len; ++idx )
{
msg[idx] = (byte) tempString[idx];
}
这是由UTF8编码本身完成的。
那么你可以使用UTF8.GetString(Byte[])方法来解码