none
Кодировка в консольном моде WPF RRS feed

  • Вопрос

  • Здравствуйте, я делаю универсальную программу на WPF (даю возможность запускать и как обычный проект и как консоль)
    Делаю с помощью:

       AttachConsole(ATTACH_PARENT_PROCESS);

    При вызове из cmd.exe даже при применении русских символов все работает!

    Но если использовать bat файл (Записать точно такую же команду в файл), то русские символы превращаются в нечто непонятное.

    К сожалению microsoft не дает мне выложить скришоты

    Пример неправильного чтения строки "Приложения" => "╧Ёшыюцхэш "

    Подскажите, как это исправить?

    9 апреля 2015 г. 12:10

Ответы

  • А бэтч файл у вас в какой кодировке? Должен быть в той же кодировке что и консоль по умолчанию. 

    Добавьте команду chcp без параметров в бэтч, это укажет требуемую кодировку. В ней и пересохраните бэтч файл. 

    А с программой скорее всего все в порядке.


    This posting is provided "AS IS" with no warranties, and confers no rights.

    • Помечено в качестве ответа FreeZ0n 9 апреля 2015 г. 16:52
    9 апреля 2015 г. 16:23
    Модератор

Все ответы

  • Что именно искажается? Выводимые в консоль или вводимые с клавиатуры символы? Какие значения полей Вы указали в атрибуте DllImport для AttachConsole? Как выглядит команда запуска приложения в bat-файле?


    Если сообщение помогло Вам, пожалуйста, не забудьте отметить его как ответ данной темы. Удачи в программировании!

    9 апреля 2015 г. 15:04
  • Искажается строка, которая записана в bat файл
    Так не работает:

    MakeBackup.exe /r /co=0 /fi="C:\Приложения\Backups\Sites\1.zip" /fo=D:\www

    Но так работает:

    chcp 1251
    MakeBackup.exe /r /co=0 /fi="C:\Приложения\Backups\Sites\1.zip" /fo=D:\www

    Я знаю, что здесь проблема с кодировкой, но не знаю как именно ее исправить...

    Стартап метод:

    private void Application_Startup(object sender, StartupEventArgs e)
            {
                MainWindow wnd = new MainWindow();
                if (e.Args.Length > 0)
                {
                    if (e.Args[0].IndexOf("/") > -1)
                    {
                        GetInsideArgs();
                        AttachConsole(ATTACH_PARENT_PROCESS);
                        Console1 cc = new Console1(e.Args);
                    }
                    else
                    {
                        wnd.Show();
                    }
                }
                else
                {
                    wnd.Show();
                }
            }

     Неуправляемый метод:

    [DllImport("kernel32.dll")]
    static extern bool AttachConsole(int dwProcessId);
    private const int ATTACH_PARENT_PROCESS = -1;





    • Изменено FreeZ0n 9 апреля 2015 г. 15:56 Личные данные
    9 апреля 2015 г. 15:52
  • А бэтч файл у вас в какой кодировке? Должен быть в той же кодировке что и консоль по умолчанию. 

    Добавьте команду chcp без параметров в бэтч, это укажет требуемую кодировку. В ней и пересохраните бэтч файл. 

    А с программой скорее всего все в порядке.


    This posting is provided "AS IS" with no warranties, and confers no rights.

    • Помечено в качестве ответа FreeZ0n 9 апреля 2015 г. 16:52
    9 апреля 2015 г. 16:23
    Модератор
  • Спосибо, дело было в кодировке bat файла!
    9 апреля 2015 г. 16:52