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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 13.07.2018, 08:57   #1
Мaкс
Форумчанин
 
Регистрация: 12.06.2018
Сообщений: 831
Вопрос Выводит кракозябры, а должен был вывести русские буквы.

Запустил программу которая выводит содержимое txt файла, но русские буквы заменялись на кракозябры, с английскими нормально всё. Пробовал поменять кодировку на кирилицу - не помогло. Что нужно сделать?
Код:
using System;
using System.IO;
class ShowFile
{
    static void Main(string[] args)
    {
        int i;
        FileStream fin;
        if (args.Length != 1)
        {
            Console.WriteLine("Применение: ShowFile Файл");
            Console.ReadKey();
            return;
        }
        try
        {
            fin = new FileStream(args[0], FileMode.Open);
        }
        catch (IOException exc)
        {
            Console.WriteLine("He удается открыть файл");
            Console.WriteLine(exc.Message);
            Console.ReadKey();
            return; // Файл не открывается, завершить программу
        }
        // Читать байты до конца файла.
        try
        {
            do
            {
                i = fin.ReadByte();
                if (i != -1) Console.Write((char)i);
            }
            while (i != -1);
        }
        catch (IOException exc)
        {
            Console.WriteLine("Ошибка чтения файла");
            Console.WriteLine(exc.Message);
            Console.ReadKey();  
        }
        finally
        {
            fin.Close();
        }
        Console.ReadKey();
    }
}
Сразу спасибо за ответ!
Изображения
Тип файла: jpg QIP Shot - Screen 008.jpg (95.5 Кб, 128 просмотров)

Последний раз редактировалось Мaкс; 13.07.2018 в 08:59. Причина: Заменил скрин
Мaкс вне форума Ответить с цитированием
Старый 13.07.2018, 10:48   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Цитата:
Сообщение от Мaкс Посмотреть сообщение
Пробовал поменять кодировку на кирилицу - не помогло. Что нужно сделать?
1) разобраться что такое кодировка текста.
например, полезно прочитать статьи по ссылкам

не существует такой вещи как "просто текстовый файл":
Статья Джоеэля Спольски под названием «Абсолютный минимум о Unicode и наборе символов для каждого разработчика(без исключений!)»

Хабрахабр - Что нужно знать каждому разработчику о кодировках и наборах символов для работы с текстом


2) после прочтения статьи, надеюсь, Вы поймёте, что код
Цитата:
Сообщение от Мaкс Посмотреть сообщение
Код:
i = fin.ReadByte();
- это УЖАС, летящий на крыльях ночи!

в C# есть куча методов, как можно прочитать текстовый файл.
в том числе и с заданной кодировкой (перекодируя из нужной во внутреннее представление).
например,
File.ReadAllText

в зависимости от кодировки текстового файла:
Код:
string text = File.ReadAllText(path, Encoding.GetEncoding("windows-1251"));
или
Код:
string text = File.ReadAllText(path, Encoding.UTF8);
Serge_Bliznykov вне форума Ответить с цитированием
Старый 13.07.2018, 12:13   #3
Мaкс
Форумчанин
 
Регистрация: 12.06.2018
Сообщений: 831
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
- это УЖАС, летящий на крыльях ночи!
Согласен, но это первый код из учебника по этой теме. И те самые ссылки на Хабр и вики я давно которые содержат которую я уже знаю.

Последний раз редактировалось Мaкс; 13.07.2018 в 12:16. Причина: Добавка
Мaкс вне форума Ответить с цитированием
Старый 13.07.2018, 12:29   #4
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,695
По умолчанию

Из учебника переведенного с английского. У авторов которого текст в файле на английском... и т.д.
p51x вне форума Ответить с цитированием
Старый 13.07.2018, 12:34   #5
Мaкс
Форумчанин
 
Регистрация: 12.06.2018
Сообщений: 831
По умолчанию

Цитата:
Сообщение от p51x Посмотреть сообщение
Из учебника переведенного с английского. У авторов которого текст в файле на английском... и т.д.
Я вообще то думал, что как и просто в коде без дополнительных файлов русская кодировка автоматически добавляется, но с файлами это не работает.
Мaкс вне форума Ответить с цитированием
Старый 13.07.2018, 12:59   #6
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,695
По умолчанию

И в коде всё это есть. Просто там кодировка исходного файла, строк и вывода совпали. А попробуйте запустить все студию не на русской/английской винде и посмотреть.
p51x вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Паскаль - Вывести на экран все русские согласные буквы строки в алфавитном порядке. ss1112 Помощь студентам 0 20.12.2016 18:39
Отобразить русские буквы. InkBlack Помощь студентам 2 29.09.2011 20:12
Русские буквы morgan97 Паскаль, Turbo Pascal, PascalABC.NET 4 10.03.2011 10:15
Русские буквы в консоли. Cpluser Общие вопросы C/C++ 5 07.10.2009 16:55