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);
沒有工作。任何人都知道我在這裏做錯了什麼?
嘗試以字節爲單位對數據進行編碼請參閱https://blogs.msdn.microsoft.com/csharpfaq/2006/10/09/how-do-i-calculate-a-md5-hash-from-a-string/ – jackotonye
FTP服務器中的文件是否保存爲「ASCII」? –
Ascii文件幾乎不能包含'04'。該文件使用什麼編碼? –