2017-10-21 4 views
2

Ich versuche, FTP zu verwenden Textzeilen in eine TXT-Datei auf einem Webserver gespeichert hinzuzufügen. Es verbindet und hängt den Text an, aber aus irgendeinem Grund ist es beschädigt und wird als zufällige Zeichen angezeigt (Symbole, Chinesisch usw.). Hier ist mein Code:Warum verdirbt FtpWebRequest Text, der auf eine Datei angehängt wird?

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(); 

Um zu versuchen, zu debuggen, ich konvertierte ‚Daten‘ aus einem byte [] in eine Zeichenkette mit diesem Code:

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(); 
} 

Hier ist, was die obigen Verfahren zurückgegeben wird, ein mD5-Hash-String als erwartet:

E904B52B435BF0E1DA8D4CE6EC47E45A 

Dies ist, was die gleiche 'data' var, um meine Datei über FTP angehängt, endete als:

ө⮵孃跚䟬嫤 

ich dies auch versucht haben, nur für den Fall gab es eine Codierung Problem:

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

Hat nicht funktioniert. Wer weiß, was ich hier falsch mache?

+0

versuchen, die Daten in Bytes https://blogs.msdn.microsoft.com/csharpfaq/2006/10/09/how-do-i-calculate-a-md5-hash-from-a-string beziehen kodieren/ – jackotonye

+2

Ist die Datei im FTP-Server als 'ASCII' gespeichert? –

+0

Ascii-Datei kann kaum "04" enthalten. Welche Codierung verwendet die Datei? –

Antwort

0

Schaltet die .txt aus codiert wurde als Unicode nicht ASCII. Wikipedia sagte ASCII war der Standard, aber wenn Sie das Menü "Speichern unter" öffnen, können Sie überprüfen. Sobald ich mit Encoding.Unicode gespeichert habe, hat es gut funktioniert.

Verwandte Themen