日期:2014-05-18  浏览次数:20981 次

C# 如何往socket写入Unicode编码不可见字符
我用C#些的客户端,服务端是java的,为了辨别消息的开始和结束,使用Unicode编码不可见字符分隔,服务端是第三方开发的。规定使用\u000b 开头,\u001c\u000d 结束,请问如何写入啊?还有 接收的时候我如何判断这些不可见字符?大侠们帮帮忙,会的麻烦给个伪代码例子。谢谢了!  


------解决方案--------------------
唉!

通讯是字节流,不管你说什么字符串。
------解决方案--------------------
socket读写的结果是byte[]你可以先编译这个byte[]找到起始结束位,然后将中间一段取出来显示
发送的时候也是在前后补上这么几位
------解决方案--------------------
你只能把各种字串都变成字节数组,然后一次性的发送出去,一旦你转码成字节发送,就没有你所说的问题了

------解决方案--------------------
写入字符串前进行转换进可以的..........
------解决方案--------------------
要不你在转换成byte[]时,最后面存放一个索引(原文开始索引),然后在读取的时候从该索引开始读不就ok了。
------解决方案--------------------
使用Unicode编码不可见字符分隔

为什么用 “不可见”字符分隔呢,规定一个他输字符分割比较好!
------解决方案--------------------
方法1,作为字符串进行写入:
定义 string str = "\u001c\u000d";
然后作为字符串进行写入. 

方法2:你给出的已经是 byte[]了
那么定义成 byte[] bs = [00][1c][00][0d] 即可. 也就是10进制的[00][28][00][13] 

总之. 你给出的已经是 byte字节了,所以直接发字节即可.没有什么太多可想的. 把你的字节附在 你报文的头和尾即可.

比如:
[00,0b][.....报文体........][00,1c,00,0d]
------解决方案--------------------
晕死
字节的传输怎么可能有不可见。。。
除非自己做标记
然后解析的时候替换

------解决方案--------------------
不是吧,C++板块的得分高手,不知道这些吗?
byte[] bdata = new byte[100];
bdata[0] = 0x000b;
//你的数据赋值在中间这一段。
bdata[98] = 0x001c;
bdata[99] = 0x000d;