2017-10-21 19 views
2

J'essaie d'utiliser FTP pour ajouter des lignes de texte à un fichier .txt stocké sur un serveur Web. Il se connecte et ajoute le texte, mais pour une raison quelconque, il est corrompu et affiche comme des caractères aléatoires (symboles, chinois, etc). Voici mon code:Pourquoi FtpWebRequest corrige-t-il le texte ajouté à un fichier?

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

Pour essayer de débogage, je me suis converti « données » à partir d'un octet [] dans une chaîne en utilisant ce 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(); 
} 

Voici ce que la méthode ci-dessus est revenu, un md5 chaîne de hachage comme prévu:

E904B52B435BF0E1DA8D4CE6EC47E45A 

C'est ce même var 'data', joint à mon dossier via FTP, a fini comme:

ө⮵孃跚䟬嫤 

J'ai même essayé, juste au cas où il y avait un problème d'encodage:

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

ne fonctionne pas. Quelqu'un sait ce que je fais mal ici?

+0

Essayez d'encoder les données en octets se référer à https://blogs.msdn.microsoft.com/csharpfaq/2006/10/09/how-do-i-calculate-a-md5-hash-from-a-string/ – jackotonye

+2

Le fichier du serveur FTP est-il enregistré sous le nom "ASCII"? –

+0

Le fichier ASCII peut difficilement contenir '04'. Quel encodage utilise le fichier? –

Répondre

0

Il s'avère que le fichier .txt a été codé comme Unicode et non ASCII. Wikipédia dit que ASCII était la valeur par défaut, mais si vous ouvrez le menu "Enregistrer sous", vous pouvez vérifier. Dès que j'ai enregistré avec Encoding.Unicode ça a bien fonctionné.