2017-10-21 124 views
2

我正在嘗試使用FTP將文本行添加到存儲在Web服務器上的.txt文件中。它是連接和附加文本,但由於某種原因,它被破壞並顯示爲隨機字符(符號,中文等)。這裏是我的代碼:爲什麼FtpWebRequest會破壞附加到文件的文本?

byte[] data = md5Encryptor.ComputeHash(Encoding.ASCII.GetBytes(dataString)); 

FtpWebRequest request = (FtpWebRequest)WebRequest.Create(ftpAddress + "file.txt"); 
request.Method = WebRequestMethods.Ftp.AppendFile; 
request.ContentLength = data.Length; 
request.Credentials = ftpCredentials; 

Stream requestStream = request.GetRequestStream(); 
requestStream.Write(data, 0, data.Length); 
requestStream.Close(); 

FtpWebResponse response = (FtpWebResponse)request.GetResponse(); 
response.Close(); 

要儘量調試,我用這個代碼從一個byte []轉換「數據」回字符串:

public static string BytesToString(byte[] data) 
{ 
    StringBuilder sb = new StringBuilder(); 
    for (int i = 0; i < data.Length; i++) 
    { 
     sb.Append(data[i].ToString("X2")); 
    } 

    return sb.ToString(); 
} 

下面是上述方法返回一個如預期MD5哈希字符串:

E904B52B435BF0E1DA8D4CE6EC47E45A 

這是相同的「數據」變種,附加到通過FTP我的文件,最後成爲:

ө⮵孃跚䟬嫤 

我甚至已經試過這一點,以防萬一有一個編碼問題:

string dataString = BytesToString(data); 
bytes[] newBytes = Encoding.ASCII.GetBytes(dataString); 

沒有工作。任何人都知道我在這裏做錯了什麼?

+0

嘗試以字節爲單位對數據進行編碼請參閱https://blogs.msdn.microsoft.com/csharpfaq/2006/10/09/how-do-i-calculate-a-md5-hash-from-a-string/ – jackotonye

+2

FTP服務器中的文件是否保存爲「ASCII」? –

+0

Ascii文件幾乎不能包含'04'。該文件使用什麼編碼? –

回答

0

原來.txt被編碼爲Unicode而非ASCII。維基百科表示ASCII是默認的,但如果你打開「另存爲」菜單,你可以檢查。只要我保存與Encoding.Unicode它工作得很好。

相關問題