Encoding.UTF8.GetBytes似乎插入了一个伪字节

时间:2013-01-07 18:29:25

标签: c# .net

我有以下代码,从旧的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"来自?

2 个答案:

答案 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[])方法对其进行解码。