当前位置: 代码迷 >> C# >> 关于byte[]转string的有关问题
  详细解决方案

关于byte[]转string的有关问题

热度:77   发布时间:2016-05-05 04:45:53.0
关于byte[]转string的问题
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数组是用不同的编码方式得到的  怎么能用相同的格式去解码
  相关解决方案