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

文件编码导致 打开和写入的问题
代码片断:

                                FileStream   myStream   =   (FileStream)   ofdAttachFile.OpenFile();
                                if   (myStream   !=   null)
                                {
                                       
                                        byte[]   bFile   =   new   byte[myStream.Length];
                                        myStream.Read(bFile,   0,   (int)myStream.Length);

                                        UnicodeEncoding   ue   =   new   UnicodeEncoding();
                                        string   fileContent=   ue.GetString(bFile);

                                          byte[]   bFile2   =   ue.GetBytes(fileContent);
}

我从一个文件中读取数据到byte[]   bFile,然后转化成string   fileContent,但是
fileContent再反过来转化成byte[]   bFile2   的时候,两个byte[]   变量bFile,bFile2
就不同了,主要表现为长度不同。

由于对这个地方从原理上不是很熟悉,所以还是不能理解为什么会出现这个问题。

------解决方案--------------------
先看看内容对不对,然后长度差多少?
------解决方案--------------------
线索是要自己发现的,你用十六进制编辑器对比一下就可以了。
------解决方案--------------------
可能是编码问题。
------解决方案--------------------
曾经遇到过
FileStream myStream = (FileStream) ofdAttachFile.OpenFile();
if (myStream != null)
{
byte[] bFile = new byte[myStream.Length];
//
//上一行开辟的数组,大于文件的长度
//可能是:如果流长度=n,则数组长度==((int)(n/256 + 1)) * 256
//我将文件读到串,再将其写到文件,发现文件的尾部多了一些空格
//
myStream.Read(bFile, 0, (int)myStream.Length);

UnicodeEncoding ue = new UnicodeEncoding();
string fileContent= ue.GetString(bFile);
byte[] bFile2 = ue.GetBytes(fileContent);
}