Кодировка при чтении из stdin
От: Somescout  
Дата: 11.09.19 18:06
Оценка:
Здравствуйте.

Пытаюсь передать данные из одной программы в другую через перенаправление ввода, примерно так:
  Запускающая программа
            var serializer = new XmlSerializer(typeof(PowershellCommand));

            // Говнокод, в процессе переделки
            var pwd = new NetworkCredential("", command.Password).SecurePassword;

            var psi = new ProcessStartInfo
            {
                Domain = command.Domain,
                UserName = command.UserName,
                Password = pwd,
                FileName = powershellHostPath,

                CreateNoWindow = true,

                RedirectStandardInput = true,
            };

            try
            {
                var process = Process.Start(psi);

                serializer.Serialize(process.StandardInput, command.Command);
                process.StandardInput.Close();

                return process;
            }
            catch (Win32Exception ex) when (ex.HResult == -2147467259 && ex.NativeErrorCode == 1326) // 0x80004005
  Вызываемая программа

        private PowershellCommand GetCommand()
        {
            if (Console.IsInputRedirected)
            {
                return ReadCommand(Console.In);
            } else {...}
    }

        private PowershellCommand ReadCommand(System.IO.TextReader textReader)
        {
            var serializer = new XmlSerializer(typeof(PowershellCommand));

            return (PowershellCommand)serializer.Deserialize(textReader);
        }

Всё работает отлично, пока не встречается текст на русском — он превращается в кашу. Есть какой-нибудь способ корректно передавать кодировку (я пока обошёл это Base64)?

ЗЫ. Побочный вопрос: насколько я понимаю, если stdout родительского процесса перенаправлен, у дочернего он тоже будет перенаправлен — можно ли как-то заставить его игнорировать перенаправление и выводить в консоль?
ARI ARI ARI... Arrivederci!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.