3 / 3 / 1
Регистрация: 11.01.2012
Сообщений: 19
1

Не верная кодировка при отправке файла на FTP

24.01.2012, 13:34. Показов 3933. Ответов 5
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Добрый день уважаемые гуру! Целый день бьюсь над задачкой, софтинка по отправке файла на FTP, имя файла берется из пользовательской формы :

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
string[] g = File.ReadAllLines("config.pronto");
                progressBar1.Maximum = 10;
                progressBar1.Value = 1;
                label1.Text = "Подождите...";
                string a = (g[5]);
                string B = (urlTextBox.Text);
               
              
                
 
                string c = (a + B + ".zip");
                string ftpfile;
                
                ftpfile = (".zip" + a + B + ".zip");
                
                
                string inputfilepath = c;
                string ftpfilepath = (B + ".zip");
               
                
 
                try
                {
                    string ftpfullpath = ("ftp://" + g[1] + ftpfilepath);
                                     
                                                                            label1.Text = "Соединение с FTP сервером";
                    FtpWebRequest ftp = (FtpWebRequest)FtpWebRequest.Create(ftpfullpath);
                    ftp.Credentials = new NetworkCredential("ЛОГИН ", "ПАРОЛЬ");
                    progressBar1.Value = 3;
                    ftp.KeepAlive = true;
                    ftp.UseBinary = true;
                    ftp.Proxy = null;
                    ftp.Method = WebRequestMethods.Ftp.UploadFile;
                    FileStream fs = File.OpenRead(inputfilepath);
                    label1.Text = "Начата отправка файла";
                    progressBar1.Value = 5;
                    byte[] buffer = new byte[fs.Length];
                    fs.Read(buffer, 0, buffer.Length);
                    label1.Text = "Начата отправка файла";
                    fs.Close();
                    Stream ftpstream = ftp.GetRequestStream();
                    progressBar1.Value = 7;
                    ftpstream.Write(buffer, 0, buffer.Length);
                    ftpstream.Close();
                    progressBar1.Value = 9;
                    label1.Text = "Начата отправка файла";
Но вот такая незадача...файл который заливается на FTP,имеет не читаемое имя.
Положим если файл называется - Саратов-24.01.2012.zip, то на FTP его название будет - Саратов-24.01.2012.zip
Я побывала изменять кодировку перед отправкой файла :
C#
1
2
3
System.Text.Encoding utf_8 = System.Text.Encoding.ASCII;
                byte[] utf8Bytes = System.Text.Encoding.ASCII.GetBytes(ftpfilepath);
                ftpfilepath = System.Text.Encoding.ASCII.GetString(utf8Bytes);
Но все тщетно, вместо "коркозяб", знаки вопроса. Уважаемые гуру! Подскажите, в какую сторону смотреть
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
24.01.2012, 13:34
Ответы с готовыми решениями:

Кодировка при отправке файла на email
И так, не получается сделать Русскую кодировку отправленного файла, получаются крякозябры - (скрин)...

Неверная кодировка при отправке данных на сайт
Вообщем целый день угрохал на то чтобы найти почему на сайт отправляет не ту кодировку которую мн...

Не верная кодировка в БД, при добавлении вместо символов ?
Работаю с ASP, использую библиотеку MySQL. При попытке установить значение на русском языке вместо...

Кодировка при загрузке файла на FTP сервер
Здравствуйте, у меня возникла проблема с правильной загрузкой файла на FTP сервер. Файл...

5
Злой няш
2136 / 1505 / 565
Регистрация: 05.04.2010
Сообщений: 2,881
24.01.2012, 13:59 2
C#
1
Encoding.UTF8.GetString(Encoding.Default.GetBytes("Саратов-24.01.2012.zip"))
А вообще при считывании надо нормальную кодировку указывать.
1
3 / 3 / 1
Регистрация: 11.01.2012
Сообщений: 19
24.01.2012, 16:13  [ТС] 3
Вы меня не много не поняли)
Необходимо что бы файл на FTP попадал в читаемой кодировке, если в () у GetBytes ставить переменную значением которой является имя файла, увы такие же коркозябы.
Причем в самой форме символы читаемы.
вообще при считывании надо нормальную кодировку указывать.
А можно поподробнее, пожалуйста ?
0
Злой няш
2136 / 1505 / 565
Регистрация: 05.04.2010
Сообщений: 2,881
24.01.2012, 19:59 4
Kseniya_sar, мне вот интересно, вы пишите полсотни строчек и потом пытаетесь их запустить? Конечно так ничего работать не будет. Код мало того, что показан не полностью, так еще и безобразно.

Цитата Сообщение от Kseniya_sar Посмотреть сообщение
если в () у GetBytes ставить переменную значением которой является имя файла
А зачем менять кодировку имени файла, если надо поменять кодировку содержимого?
Прежде всего надо определится в какой кодировке хранятся данные. Как в примере выше, я с этим не мучился и считал в Default. После конвертанул в UTF8.
Цитата Сообщение от Kseniya_sar Посмотреть сообщение
System.Text.Encoding utf_8 = System.Text.Encoding.ASCII;
Это почему переменная называется utf_8, а присваивается ей значение ASCII? Кого вы пытаетесь обмануть? Да и какой вообще смысл ее, если она не используется?
В общем исходя из этих строк:
C#
1
2
byte[] utf8Bytes = System.Text.Encoding.ASCII.GetBytes(ftpfilepath);
ftpfilepath = System.Text.Encoding.ASCII.GetString(utf8Bytes);
Заменить на:
C#
1
string fileString = System.Text.Encoding.UTF8.GetString(buffer);
И сохранить эту строку в файл, а не массив байтов.
C#
1
2
if (!File.Exists(path))
        File.WriteAllText(path, fileString);
Или здесь вы чего-то не договариваете.

Не по теме:

По-поводу безобразия:

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
                string a = (g[5]);
                string B = (urlTextBox.Text);
               
              
                
 
                string c = (a + B + ".zip");
                string ftpfile;
                
                ftpfile = (".zip" + a + B + ".zip");
                
                
                string inputfilepath = c;
                string ftpfilepath = (B + ".zip");
               
                
 
                try
                {
                    string ftpfullpath = ("ftp://" + g[1] + ftpfilepath);
Да, это говно-код, и жутко усложняет понимание происходящего. a, B, c, 5, 1 - что за магические значения? Сегодня вы знаете, что они означают, через день забудете и не вспомните. Я уже молчу о том, что здесь фигурирует обилие временных переменных, которые от силы, уверен, используются один раз.

1
3 / 3 / 1
Регистрация: 11.01.2012
Сообщений: 19
25.01.2012, 10:31  [ТС] 5
Kseniya_sar, мне вот интересно, вы пишите полсотни строчек и потом пытаетесь их запустить? Конечно так ничего работать не будет. Код мало того, что показан не полностью, так еще и безобразно.
Прошу огромного прощения! Я совсем недавно занялась программированием, и пока еще не знаю что к чему, вот, я постаралась исправить "безобразие", вот весь код :
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
private void button1_Click(object sender, EventArgs e)
        {
                try
            {
                string[] g = File.ReadAllLines("config.pronto");
                string folderbannrepach = g[5]; string ftpbannrepach = g[1];
                progressBar1.Maximum = 10;
                progressBar1.Value = 1;
                label1.Text = "Подождите...";
                string ftpfile = (folderbannrepach + urlTextBox.Text + ".zip");
                string inputfilepath = (folderbannrepach + urlTextBox.Text + ".zip");
                string ftpfilepath = (urlTextBox.Text + ".zip");
                try
                {
                   string ftpfullpath = ("ftp://" + ftpbannrepach + ftpfilepath);
                    label1.Text = "Соединение с FTP сервером";
                    FtpWebRequest ftp = (FtpWebRequest)FtpWebRequest.Create(ftpfullpath);
                    ftp.Credentials = new NetworkCredential("ЛОГИН", "ПАРОЛЬ");
                    progressBar1.Value = 3;
                    ftp.KeepAlive = true;
                    ftp.UseBinary = true;
                    ftp.Proxy = null;
                    ftp.Method = WebRequestMethods.Ftp.UploadFile;
                    FileStream fs = File.OpenRead(inputfilepath);
                    label1.Text = "Начата отправка файла";
                    progressBar1.Value = 5;
                    byte[] buffer =  new byte[fs.Length];
                    fs.Read(buffer, 0, buffer.Length);
                    label1.Text = "Начата отправка файла";
                    fs.Close();
                    Stream ftpstream = ftp.GetRequestStream();
                    progressBar1.Value = 7;
                    ftpstream.Write(buffer, 0, buffer.Length);
                    ftpstream.Close();
                    progressBar1.Value = 9;
                    
                    //Авторизация на SMTP сервере
                    SmtpClient Smtp = new SmtpClient(g[2], Convert.ToInt32(g[3]));
                    Smtp.Credentials = new NetworkCredential("", "");
                    //Формирование письма
                    MailMessage Message = new MailMessage();
                    Message.From = new MailAddress("");
                    Message.To.Add(new MailAddress(g[4]));
                    Message.Subject = ("На FTP выложен файл с банером в архиве " + "(" + g[1] + " " + urlTextBox.Text + ".zip" + ")");
                    Message.Body = richTextBox1.Text;
                    Smtp.Send(Message);//отправка
                    label1.Text = "Файл отправлен на FTP. Письмо  ушло.";
                    progressBar1.Value = 10;
                }
 
                catch (Exception)
                {
                    label1.Text = ("НЕ НАЙДЕН ФАЙЛ " + ftpfilepath + "! Убедитесь что данный файл присутсвует в папке " + g[5]);
                }
            }
            catch (Exception)
            {
                label1.Text = ("НЕ НАЙДЕН ФАЙЛ ФАЙЛ НАСТРОЕК ПРОГРАММЫ!");
И если можно, по теме :
C#
1
string fileString = System.Text.Encoding.UTF8.GetString(buffer);
Как я поняла, эту сточку и последующие данные в Вашем совете нужно вставить сразу после
C#
1
byte[] buffer =  new byte[fs.Length];
Я побывала, но в файл ничего не пишется И даже если и писалось бы, как это поможет названию файла на FTP? Я совсем запуталась Эх, программирование наверное "не мое"....
0
Злой няш
2136 / 1505 / 565
Регистрация: 05.04.2010
Сообщений: 2,881
25.01.2012, 15:47 6
Попробовал считать файл в массив байтов и сохранить двумя разными способами. Если сохранять как массив байтов, а не переводить в строку, то кодировка правильная.
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
using System;
using System.Text;
using System.IO;
 
class Program
{
    static void Main()
    {
        byte[] buffer;
        using (FileStream fs = File.OpenRead("file.txt"))
        {
            buffer = new byte[fs.Length];
            fs.Read(buffer, 0, buffer.Length);
        }
        using (Stream ftpstream = File.OpenWrite("file1.txt"))
            ftpstream.Write(buffer, 0, buffer.Length);
        File.WriteAllText("file2.txt", Encoding.Default.GetString(buffer), Encoding.Default);
    }
}
Вы уверены что файл, который был прочитан, находился в правильной кодировке с читаемым текстом? Попробуйте не сохранять данные в файл, а вывести их сперва на экран:
C#
1
Encoding.Default.GetString(buffer)
Если Default не сработает, то попробуйте подобрать кодировку.
0
25.01.2012, 15:47
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
25.01.2012, 15:47
Помогаю со студенческими работами здесь

Кодировка при отправке
Добрый день! Возможно ли настроить Lotus так, чтобы тело письма исходящей SMTP почты (не вложение)...

Ошибка при отправке но ftp
8.0 УТ 10.1 Всем привет. При отправке файла на ftp сервер(FTPСоединение) происходит ошибка...

Кодировка при отправке письма
Добрый день, подскажите как исправить корявую кодировку. Отправляю письмо с помощью компонента...

Кодировка при отправке письма
Добрый день, подскажите как исправить корявую кодировку. Отправляю письмо с помощью компонента...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru