2
votes

the context is as follow: I recive xml files with russian text, my FileSystemWacher on Create event transfer them to an internal ftp server like this:

public static FtpWebResponse UploadFile(string localFile, string ftpFile, NetworkCredential credentials) {

        //Thread.Sleep(2000);
        // Get the object used to communicate with the server.

        FtpWebRequest request = (FtpWebRequest)WebRequest.Create(ftpFile);
        request.Method = WebRequestMethods.Ftp.UploadFile;
        request.UseBinary = true;
        request.Proxy = null;

        request.Credentials = credentials;


        using (FileStream sourceStream = new FileStream(localFile,FileMode.Open))
        using (Stream requestStream = request.GetRequestStream())
        {
            CopyStream(sourceStream, requestStream);
        }

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

    }

private static void CopyStream(Stream input, Stream output) { byte[] buffer = new byte[32768]; while (true) { int read = input.Read(buffer, 0, buffer.Length); if (read <= 0) return; output.Write(buffer, 0, read); } }

After the transfer, on the ftp side, files look like that:

<OTPR consignment_number="33504655" weight_of_load="57160" forwarding_railway="22" forwarding_station="330206" consignor="3590" name_of_consignor="пїЅпїЅпїЅ "пїЅпїЅпїЅпїЅпїЅпїЅIпїЅ-пїЅпїЅпїЅпїЅIпїЅпїЅпїЅпїЅпїЅ". 18011. пїЅ. пїЅпїЅпїЅпїЅпїЅпїЅпїЅ. пїЅпїЅпїЅ.пїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅ, пїЅпїЅпїЅ.1 пїЅпїЅIпїЅ 225. 0472719922." destination_railway="53" destination_station="517508" consignee="9999" name_of_consignee="пїЅпїЅпїЅпїЅпїЅ пїЅпїЅпїЅпїЅпїЅпїЅпїЅ пїЅпїЅпїЅ." packing="2" nhm="12019000" name_of_load="пїЅпїЅпїЅпїЅ пїЅпїЅпїЅпїЅпїЅпїЅ" dt="24012013" />

not like the original:

<OTPR consignment_number="33504671" weight_of_load="58740" forwarding_railway="22" forwarding_station="330206" consignor="3590" name_of_consignor="ТОВ "КОМПАНIЯ-АГРОIНВЕСТ". 18011. М. ЧЕРКАСИ. ВУЛ.ДОБРОВОЛЬСЬКОГО, БУД.1 ОФIС 225. 0472719922." destination_railway="53" destination_station="517508" consignee="9999" name_of_consignee="БУНГЕ РОМАНИЯ СРЛ." packing="2" nhm="12019000" name_of_load="БОБЫ СОЕВЫЕ" dt="24012013" /> 
1
How are you viewing the files on the receiving side? Have you looked at the bytes themselves or are you using a text editor? If you're using a text editor, it may not be interpreting the encoding correctly . For example, if you are sending from a machine with UTF-8 as the default encoding and sending to a machine with a different default encoding, that could account for the apparent difference. - DrMacro

1 Answers

0
votes

This is an old question, but I came across it when dealing with some character encoding issues. Here's what I found.

I think that you need to specify the character encoding.

I read that 1251 is the encoding for Russian, but I've never done anything in Russian before, so your mileage may vary.

string url = getUrl();

FtpWebRequest request = (FtpWebRequest)WebRequest.Create(url);
request.Method = WebRequestMethods.Ftp.UploadFile;            
request.Credentials = new NetworkCredential(destination.UserName, destination.Password);
request.UseBinary = true;                        

byte[] bytesToSend = Encoding.GetEncoding(1251).GetBytes(stringToSendToFtp.ToCharArray());

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

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