Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > Общие вопросы .NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 05.01.2011, 18:09   #1
vedro-compota
любитель-далеко не
Участник клуба
 
Аватар для vedro-compota
 
Регистрация: 13.04.2010
Сообщений: 1,156
По умолчанию Как установить кодировку байтового потока?

Здравствуйте уважаемые программисты.
Прошу подсказать - как установить кодировку байтового потока - чтобы правильно прочитать txt-файл, который записан в utf-8 ?
Приведу здесь фрагмент программы -
Код:
int i = 0;
            FileStream fs; // объявляем байтовый поток
            string FilePath = Application.StartupPath + @"/map.txt";
            try { fs = new FileStream(FilePath, FileMode.Open); }  // создаём байтовый поток
            catch (FileNotFoundException exp) { return ; }
            catch { return; }
            string ReturnValue = "Открытие файла...\n Файл открыт успешно. \n"; // эта строка- отчёт порядка загрузки файла.
          
            while (i != (-1)) 
            {
                try { i = fs.ReadByte(); }
                catch (Exception exc)
                {
                    MessageBox.Show(exc.Message, " Ошибка при чтении файла");
                    return ;
                }
                label1.Text = label1.Text + i.ToString();
            }
Вместо символов в label1 записываются только цифры......думаю, что это из-за того, что не установлена кодировка.
Заранее благодарю за ответы.
против абортов=за + жизнь;.фкн вгу;_______________________мойблг
vedro-compota вне форума Ответить с цитированием
Старый 05.01.2011, 18:24   #2
vedro-compota
любитель-далеко не
Участник клуба
 
Аватар для vedro-compota
 
Регистрация: 13.04.2010
Сообщений: 1,156
По умолчанию

нашёл в поиске что-то похожее - но не понятно что здесь к чему -
Код:
FileStream fs = new FileStream("<path>");

StreamReader sr = new StreamReader(fs);

System.Text.Encoding code = sr.CurrentEncoding;

StreamWriter sw = new StreamWriter(fs, code);
------------------------------------------
ага - получается, что после этих строк читать надо уже из sw
против абортов=за + жизнь;.фкн вгу;_______________________мойблг

Последний раз редактировалось vedro-compota; 05.01.2011 в 18:51.
vedro-compota вне форума Ответить с цитированием
Старый 05.01.2011, 18:51   #3
vedro-compota
любитель-далеко не
Участник клуба
 
Аватар для vedro-compota
 
Регистрация: 13.04.2010
Сообщений: 1,156
По умолчанию

пробовал так -
Код:
    StreamReader stream1 = new StreamReader(fs);
            System.Text.Encoding code = dstream1.CurrentEncoding;
            StreamReader stream2 = new StreamReader(fs,code);
но что-то не работает...
против абортов=за + жизнь;.фкн вгу;_______________________мойблг
vedro-compota вне форума Ответить с цитированием
Старый 05.01.2011, 20:26   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

да, вижу тут помощь так и оказывается...

vedro-compota,
одна из вещей, которая лично мне сильно не нравится в C# (ну, точнее в .NET),
это то, что одно и то же действие может быть сделано множеством разных способов
(через использование разных классов и их методов)...
это касается всего.
в том числе и работы с текстовыми файлами.

ну это было лирическое отступление...

Абсолютно ничего не гарантирую.
Но попробуйте так (одна строчка!):
Код:
            string YourText = System.IO.File.ReadAllText(Application.StartupPath + @"/map.txt", System.Text.Encoding.UTF8);
Serge_Bliznykov вне форума Ответить с цитированием
Старый 05.01.2011, 21:36   #5
m0nax
Форумчанин
 
Аватар для m0nax
 
Регистрация: 25.09.2009
Сообщений: 525
По умолчанию

как можно придумать столько вариантов, но не заметить самый очевидный, логичный и простой?))

Код:
     StreamReader stream1   =    new StreamReader("path", Encoding.UTF8);
m0nax вне форума Ответить с цитированием
Старый 06.01.2011, 10:36   #6
vedro-compota
любитель-далеко не
Участник клуба
 
Аватар для vedro-compota
 
Регистрация: 13.04.2010
Сообщений: 1,156
По умолчанию

Serge , m0nax , спасибо )) пробую этими способами))
---------------------------------------
Serge , ваш вариант работает "чётко" )) спасибо))
m0nax , не подскажите - почему не работает посимвольное считывание ?
Код:
string FilePath = Application.StartupPath + @"/map.txt";
            StreamReader reader = new StreamReader(FilePath, Encoding.UTF8);
        
            string line;
            int i=0;
            while ((i= reader.Read())  != -1)
            {
                line = i.ToString();
                label1.Text += line ;
                textBox1.Text += line ;
            }
в label1.Text получаю что-то вроде того -
Цитата:
10421086108810861085107710783250483 25048323232503252325313101052108610 89108210741072323252483253483232324 9325132523
против абортов=за + жизнь;.фкн вгу;_______________________мойблг

Последний раз редактировалось vedro-compota; 06.01.2011 в 10:49.
vedro-compota вне форума Ответить с цитированием
Старый 06.01.2011, 10:51   #7
vedro-compota
любитель-далеко не
Участник клуба
 
Аватар для vedro-compota
 
Регистрация: 13.04.2010
Сообщений: 1,156
По умолчанию

но при этом работает - то есть так -
Код:
 string FilePath = Application.StartupPath + @"/map.txt";
            StreamReader reader = new StreamReader(FilePath,Encoding.UTF8);
        
            string line;
            int i=0;
            while ((line = reader.ReadLine())  != null)
            {
             
                label1.Text += line ;
                textBox1.Text += line ;
            }
получаю в лэйбле -
Цитата:
Воронеж 20 20 2 4 5Москва 40 50 1 3 4 6 7 Липецк 70 90 3 6 9Волгда 23 90 1 3 4 8 9Псков 34 100 7 8Китеж-град 300 300Урюпинск 67 83 2 3 0
против абортов=за + жизнь;.фкн вгу;_______________________мойблг
vedro-compota вне форума Ответить с цитированием
Старый 06.01.2011, 11:04   #8
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
почему не работает посимвольное считывание ?
почему не работает?! Работает.
Вот эта строчка
Цитата:
Код:
line = i.ToString();
переводит байты в числа (коды символов). Вот Вы их и видите...
Serge_Bliznykov вне форума Ответить с цитированием
Старый 06.01.2011, 11:32   #9
vedro-compota
любитель-далеко не
Участник клуба
 
Аватар для vedro-compota
 
Регистрация: 13.04.2010
Сообщений: 1,156
По умолчанию

мммм....то есть надо использовать parse...сейчас попробую)
-------------------
опять я не понимаю разницы приведения, преобразования.....каким же тогда образов можно получить из кода байта еги символьное представление (букву - в том числе) ?.....наверное, сначала необходимо перевести в char.
против абортов=за + жизнь;.фкн вгу;_______________________мойблг

Последний раз редактировалось vedro-compota; 06.01.2011 в 11:44.
vedro-compota вне форума Ответить с цитированием
Старый 06.01.2011, 11:52   #10
vedro-compota
любитель-далеко не
Участник клуба
 
Аватар для vedro-compota
 
Регистрация: 13.04.2010
Сообщений: 1,156
По умолчанию

всё это дело приобретает следующий вид -
Код:
string FilePath = Application.StartupPath + @"/map.txt";
            StreamReader reader = new StreamReader(FilePath,Encoding.UTF8);
            char[] c = new char[1];
            int i=0;
            while ((i= reader.Read())  != -1)
            {
                c[0]=  Convert.ToChar(i);
                string line = new string ( c);
                label1.Text += line ;
                textBox1.Text += line ;
            }
если появилось необъяснимое желание считывать строку посимвольно )))) - но приходится выполнять двойное преобразование -
если кто знает как это сделать по-человечески - поделитесь ))
против абортов=за + жизнь;.фкн вгу;_______________________мойблг

Последний раз редактировалось vedro-compota; 06.01.2011 в 11:55.
vedro-compota вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как узнать номер потока из самого потока? GaMeSTeR Помощь студентам 0 03.12.2010 09:50
Как можно читать текст и менять кодировку cppta Общие вопросы C/C++ 10 08.03.2010 21:34
Как поменять кодировку windows Silverstreet Помощь студентам 4 23.01.2010 21:40
как перевести txt документ в кодировку utf 8? 2lovely4u Помощь студентам 2 18.06.2009 23:36