SOCKET接收过来的byte[]转string(一个的是 LOCK,一个是中文 你好),转换成string的时候,要么英文是乱码,要么中文是乱码,试过了知道的所有编码,总归有一个是乱码,这个应该怎么解决啊!
byte[] b1 = new byte[] { 79, 96, 89, 125 };
byte[] b2 = new byte[] { 76, 79, 67, 75 };
string strb1 = System.Text.Encoding.GetEncoding("GB2312").GetString(b1);//乱码
string strb2 = System.Text.Encoding.GetEncoding("GB2312").GetString(b2);//LOCK
string strb12 = System.Text.Encoding.BigEndianUnicode.GetString(b1);//你好
string strb22 = System.Text.Encoding.BigEndianUnicode.GetString(b2);//乱码
------解决思路----------------------
??? 貌似不对哦
0x79,0x96
和
0x7696
可不是一个东西
------解决思路----------------------
你先弄明白对方是如何将文字变成数组的
然后用对应的编码解码
不要靠猜想
------解决思路----------------------
很难想象一个协议里面会使用多种字符串编码方式。如果有什么原因,也应该是写到协议里。这字符串太短,无法用程序猜测编码。
------解决思路----------------------
要同时支持几种不同的中文,UTF8是最佳选择,楼主的问题是如何转换,这应该与SOCKET发送方协商,而不是乱猜.
------解决思路----------------------
Socket 如何 解码字节流 —— 核心在于 字节流 最初是 如何编码的。
你得问问 编码字节流的人 —— 字节流编码规则 是怎样的。
PS :
一般 Socket 字节流 是不能直接 解码 String 的。
因为 String 是 可变长度。
所以 在 Socket 发送的时候,一般 都是 :
> 先 4个字节存长度;
> 再 将字节流编码;
Socket 字节流解码的时候,一般 都是:
> 先读 4个字节 的 Int —— 知道字节流的长度
> 再读 Int 个 字节,再转码 String
------解决思路----------------------
你要先说说对方发过来的 编码是什么编码,这才有的说呀
------解决思路----------------------
反过来说,如果你发送信息,你不知道该如何规范编码,随便发出去“就算了”。然后对方问你的时候,你回答对方“你多试试吧,我也不确定该用什么编码”,那么这别继续逗对方了。先停下来,先不要编程。因为无法开发。
------解决思路----------------------
编码 和 解码 要一致才行
给你一个编码口令是12345的,你用54321去解码怎么可以。
而且你的事例中 ‘你好’ ‘LOCK’ 的两个byte数组是用不同的编码方式得到的 怎么能用相同的格式去解码