我有以下代码,从旧的VB6程序转换为C#。 VB6使用了旧的Winsock,它可以接受String参数,但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"来自?
答案 0 :(得分:2)
这就是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];
}
答案 1 :(得分:0)
这是通过UTF8编码本身完成的。这很好。
然后您可以使用UTF8.GetString(Byte[])方法对其进行解码。