日期:2014-05-19  浏览次数:21170 次

问号问题,Sockets开发,发送给终端的汉字全是问号......

//往当前的数据流中写入一行字符串
streamWriter.WriteLine(STDT_READ_MSG(),Encoding.ASCII);
//刷新当前数据流中的数据
streamWriter.Flush(   );

STDT_READ_MSG()里是这样:
string   strTemp   =   "123abc ";
strTemp   +=   ConertStr(myG.SIstring( "号码1 ",4), "Unicode ", "gb2312 ");
return   strTemp;

其中123abc可以显示,而汉字出来都是问号
厂家说是编码是ascii,而其中汉字部分的协议说明是gb2312
试了N种了,晕呀.
请大家帮忙.谢谢!

///   <summary>
///   从一种编码到另一种编码
///   </summary>
///   <param   name= "str "> 源字符串 </param>
///   <param   name= "From "> From </param>
///   <param   name= "To "> To </param>
///   <returns> </returns>
string   ConertStr(string   str,   string   From,   string   To)
{

byte[]   bs   =   System.Text.Encoding.GetEncoding(From).GetBytes(str);
bs   =   System.Text.Encoding.Convert(System.Text.Encoding.GetEncoding(From),   System.Text.Encoding.GetEncoding(To),   bs);
string   res   =   System.Text.Encoding.GetEncoding(To).GetString(bs);
return   res;

}



------解决方案--------------------
Encoding.ASCII -> Encoding.Default // or Encoding.GetEncoding( "GB2312 ")
------解决方案--------------------
就是编码要一致。
------解决方案--------------------
System.Text.Encoding.BigEndianUnicode.GetBytes()
------解决方案--------------------
就是编码要一致。
------解决方案--------------------
//往当前的数据流中写入一行字符串
streamWriter.WriteLine(STDT_READ_MSG(),Encoding.Default);
//刷新当前数据流中的数据
streamWriter.Flush( );


不要指定gb2312,使用默认的即可

------解决方案--------------------
一般读写stream都是先把要写的字符串通过特定的encoding转换成byte[]。

不管是ASCII还是GB2312还是Unicode,最后在传输过程中都是一个一个的字节byte。

下边的代码是我刚写的,没经过调试,只是表达大致的意思,你看看有没有用

Encoding e = Encoding.GetEncoding( "GB2312 ");
string toBeSent = "我爱中国 ";
byte[] bytesToBeSent = e.GetBytes(toBeSent);

Stream stream ...
stream.Write(bytesToBeSent, 0, bytesToBeSent.Length);
------解决方案--------------------
你的终端的程序你你写的吗?如果不是的话,他们用了什么编码方法?
如果是的话,你写的两个编码方法一致不

其实调试的时候,你无需按实际环境条,先把你的编码解码测试完毕再挪到真实环境调

------解决方案--------------------
直接用Socket对象的Send(Byte[])方法就行了!不要弄那个什么NetWorkStream,很不灵活。
------解决方案--------------------
Encoding.Default.GetString(recv)