读书人

问号有关问题,Sockets开发,发送给终端

发布时间: 2011-12-21 23:56:01 作者: rapoo

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

读书人网 >C#

热点推荐