关于byte[]转string的问题

supconan365 2015-02-05 04:45:07
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);//乱码

...全文
790 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
supconan365 2015-02-07
  • 打赏
  • 举报
回复
解决了,的确是应该先获取对方的编码格式,然后再解码,而不应该一视同仁!谢谢各位!
土土 2015-02-06
  • 打赏
  • 举报
回复
System.Text.Encoding.default.GetString(b1); 默认就可以 你可以多试试 不过我估计你也许关键点不在这里 关键是———————— 你接收完一次数据后 没有清理数据 receivedata.clear 记得接收完一次之后要清理后 再进行第二次接收数据。
lc_ant 2015-02-06
  • 打赏
  • 举报
回复
编码 和 解码 要一致才行 给你一个编码口令是12345的,你用54321去解码怎么可以。 而且你的事例中 ‘你好’ ‘LOCK’ 的两个byte数组是用不同的编码方式得到的 怎么能用相同的格式去解码
p080720 2015-02-05
  • 打赏
  • 举报
回复
传输前的编码需要能够处理中文,传输后的解码使用编码方式。
  • 打赏
  • 举报
回复
反过来说,如果你发送信息,你不知道该如何规范编码,随便发出去“就算了”。然后对方问你的时候,你回答对方“你多试试吧,我也不确定该用什么编码”,那么这别继续逗对方了。先停下来,先不要编程。因为无法开发。
  • 打赏
  • 举报
回复
“试”啥啊?编程之前,字符串的编码格式是要有文档的,至少是你发个邮件问问人家、并且留下白纸黑字的证据啊。 假设人家告诉你说utf8,结果你接收到的是乱码,而用gb2312"试”出来了,那么这就是对方搞错了!
本拉灯 2015-02-05
  • 打赏
  • 举报
回复
一般是用UTF-8发送。如果是JAVA也是UTF-8
本拉灯 2015-02-05
  • 打赏
  • 举报
回复
你要先说说对方发过来的 编码是什么编码,这才有的说呀
吹风的兔子 2015-02-05
  • 打赏
  • 举报
回复
Socket 如何 解码字节流 —— 核心在于 字节流 最初是 如何编码的。 你得问问 编码字节流的人 —— 字节流编码规则 是怎样的。 PS : 一般 Socket 字节流 是不能直接 解码 String 的。 因为 String 是 可变长度。 所以 在 Socket 发送的时候,一般 都是 : > 先 4个字节存长度; > 再 将字节流编码; Socket 字节流解码的时候,一般 都是: > 先读 4个字节 的 Int —— 知道字节流的长度 > 再读 Int 个 字节,再转码 String
tcmakebest 2015-02-05
  • 打赏
  • 举报
回复
要同时支持几种不同的中文,UTF8是最佳选择,楼主的问题是如何转换,这应该与SOCKET发送方协商,而不是乱猜.
winnowc 2015-02-05
  • 打赏
  • 举报
回复
很难想象一个协议里面会使用多种字符串编码方式。如果有什么原因,也应该是写到协议里。这字符串太短,无法用程序猜测编码。
於黾 2015-02-05
  • 打赏
  • 举报
回复
常用的一共就那么几种,不行就挨个试吧
於黾 2015-02-05
  • 打赏
  • 举报
回复
UTF8和Unicode对于英文的编码是一致的,所以很多情况下传英文都能正确翻译,汉字就会乱码
  • 打赏
  • 举报
回复
Utf-8试试呗,话说你开发都不知道接受的string是什么方式转的byte么
灬浪子灬 2015-02-05
  • 打赏
  • 举报
回复
引用 楼主 supconan365 的回复:
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);//乱码

string strb1 = string.IsNullOrEmpty(b1 .ToString()) ? null : (byte[])b1;
於黾 2015-02-05
  • 打赏
  • 举报
回复
你先弄明白对方是如何将文字变成数组的 然后用对应的编码解码 不要靠猜想
wanghui0380 2015-02-05
  • 打赏
  • 举报
回复
??? 貌似不对哦 0x79,0x96 和 0x7696 可不是一个东西
supconan365 2015-02-05
  • 打赏
  • 举报
回复
有没有坛友帮忙解决一下啊!

110,538

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧