2017-10-21 5 views
2

FTP를 사용하여 웹 서버에 저장된 .txt 파일에 텍스트 줄을 추가하려고합니다. 텍스트를 연결하고 추가하지만 어떤 이유로 텍스트가 손상되어 임의의 문자 (기호, 중국어 등)로 표시됩니다.FtpWebRequest가 파일에 추가 된 텍스트를 손상시키는 이유는 무엇입니까?

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

위의 방법은,을 반환 무엇 :이 코드를 사용하여 문자열로 다시 바이트 []에서 '데이터를'변환,

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

디버그하려고 : 여기 내 코드입니다 MD5 해시 문자열은 예상대로 :

:

E904B52B435BF0E1DA8D4CE6EC47E45A 

이 FTP를 통해 내 파일에 추가 같은 '데이터'var에,로 결국 무엇인가

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

아스키 파일에는 '04'가 거의 포함될 수 없습니다. 파일에서 어떤 인코딩을 사용합니까? –

답변

0

.txt가 ASCII가 아닌 유니 코드로 인코딩되었음을 알 수 있습니다. Wikipedia에 따르면 ASCII가 기본값이지만 '다른 이름으로 저장'메뉴를 열면 확인할 수 있습니다. Encoding.Unicode로 저장하자마자 제대로 작동했습니다.

관련 문제