问号问题,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)