当前位置: 代码迷 >> C# >> C# 中 byte[]转换成string 型 打印输出乱码,该如何解决
  详细解决方案

C# 中 byte[]转换成string 型 打印输出乱码,该如何解决

热度:650   发布时间:2016-05-05 04:50:46.0
C# 中 byte[]转换成string 型 打印输出乱码
  byte[] bytHeadOfBag = new Byte[2] { 0xff, 0xef };   把bytHeadOfBag 转换成string strHeadOfBag = System.Text.Encoding.ASCII.GetString(bytHeadOfBag);  输出来是乱码的 如下图:



   //System.Text.Encoding encoding = System.Text.Encoding.GetEncoding("gb2312");
            byte[] bytHeadOfBag = new Byte[2] { 0xff, 0xef };           //包开始标识
           // string strHeadOfBag = Convert.ToString(bytHeadOfBag);
            string strHeadOfBag = System.Text.Encoding.ASCII.GetString(bytHeadOfBag);
            //string strHeadOfBag = System.Text.Encoding.Default.GetString(bytHeadOfBag);
            //string strHeadOfBag = encoding.GetString(bytHeadOfBag);

试了好几种方法都是这样,求高手指教
------解决思路----------------------

不能用Ascii转要么用GB2312 要么UTF8
转码一般是中文字符吧。
------解决思路----------------------
你得转成ansi的才行,如果打印机支持unicode的话,就转成这个
------解决思路----------------------
试试 Default
------解决思路----------------------
如果你想转成string的话,那么你的byte[]里的值,也要是从string里转过来,并且string转化成byte[] 和byte[]转换成string,要用同样的encoding。

直接放在byte[]里面的两个值,这么转是转不过来的。
------解决思路----------------------
你这两个字byte应该是文件签名吧。看你的变量名也像是某头标记
如果你那个是从文本文件记取的话,按下面这个表,你应该使用UTF-16 Little Endian编码方式进行读写转换
Encoding Representation 
UTF-8 EF BB BF 
UTF-16 Big Endian FE FF 
UTF-16 Little Endian FF FE 
UTF-32 Big Endian 00 00 FE FF 
UTF-32 Little Endian FF FE 00 00
------解决思路----------------------
既然是包开始标识,那么它本身就不是字符,你应该直接按16进制比较,而不是转成字符串
假如我告诉你包开始以5个0x00表示,你转完保证都是空字符串\0
------解决思路----------------------
你需要的实际编码是什么?
------解决思路----------------------
数据包是数据包,你不能把它整个当成字符串,而应该先代码去判断,解析,拆分,把里面是字符串的部分转字符串,不是字符串的部分就应该对应的去处理,而不是统一按字符串处理
假如包里有连续4个字节表示一个int,你转成字符串之后变成啥了??
------解决思路----------------------
FFEF好像没有对应的字符串...
------解决思路----------------------
如果你需要TCP拆包器可以参考.
http://blog.csdn.net/daonidedie/article/details/30712087
------解决思路----------------------
引用:
Quote: 引用:

数据包是数据包,你不能把它整个当成字符串,而应该先代码去判断,解析,拆分,把里面是字符串的部分转字符串,不是字符串的部分就应该对应的去处理,而不是统一按字符串处理
假如包里有连续4个字节表示一个int,你转成字符串之后变成啥了??

我是想字符串能够加起来当做一个整体包,如果都是byte[]型,那怎么打包呢?

不明白你所谓"打包"是什么概念
你能不能先理解什么是数据包,然后再去想你自己的"打包"方法?
------解决思路----------------------
你完全可以将多个字符串拼接到一个包里,但是你不要老想把数据包直接整个解析成一个字符串
------解决思路----------------------
数据包的概念如果你不理解,我就给你举个通俗易懂的例子:
快递包裹你总知道吧

你可以把牙膏牙刷生活用品都放到一个包裹里,但是你不要拿到一个包裹就把它整个当成某一种用品来用
比如包裹里可以有衣服,也可能有别的.
你应该先把包裹拆开,然后把衣服拿出来,再扔进洗衣机
而不是把包裹整个扔进洗衣机
------解决思路----------------------
数据包在网络中传输,本来就都是二进制的,不存在字符串
所以发送函数也只接受byte数组(二进制流)

你应该将所有数据都分别转byte数组然后拼接数组
而不是都转string
因为很多数据类型都没法转成string的
比如我前面举的例子,4个byte表示一个int
假如是1,那么也应该表示为0x00,0x00,0x00,0x01
你转成"1",再转回来还是4个byte吗
  相关解决方案