В какой кодировке модуль Python3 выводит текст?

запускаю процесс "imageToText.py", который печатает результат: print("какой то русский текст")

а в консоли приложения получается текст в кокой то кодировке

        internal static string[] GetImagesCaptions(IEnumerable<string> imagesPaths)
        {
            string path = @"C:\Users\Alexey\source\repos\PythonApplication2\GlobalEnv\imageToText.py";
            string pythonPath = @"C:\Users\Alexey\AppData\Local\Programs\Python\Python310\python.exe";
            string imagesRow = imagesPaths.Select(p => $" \"{p}\"").JoinToString();
            
            ProcessStartInfo python = new()
            {
                FileName = pythonPath,
                Arguments = "-W ignore " + path + imagesRow,
                UseShellExecute = false,
                RedirectStandardOutput = true,
                //StandardOutputEncoding = ?
            };

            using Process? process = Process.Start(python);
            ArgumentNullException.ThrowIfNull(process);
            
            using StreamReader reader = process.StandardOutput;
            return reader.ReadToEnd().Split(Environment.NewLine);

            /** 
             "╟ръЁ√Єшх ЄрсышЎ√ ё ўшёыюь ы■фхщ ш ъюышўхёЄтюь ы■фхщ"
"└ЁрЇшЁютрээр  ърЁЄр ьшЁр ёю ёЄЁрэрьш т ёшэхь ш ёшэхь ЎтхЄх"
""

             */
        }

Ответы (3 шт):

Автор решения: Tolomika

Это не в какой-то кодировке. Из-за того, что вы явно не указали что за кодировка используется в читаемом файле произошла неправильная интерпретация байтов.

Вот как можно выводить корректно данные для кодировки UTF-8:

internal static string[] GetImagesCaptions(IEnumerable<string> imagesPaths)
{
    string path = @"C:\Users\Alexey\source\repos\PythonApplication2\GlobalEnv\imageToText.py";
    string pythonPath = @"C:\Users\Alexey\AppData\Local\Programs\Python\Python310\python.exe";
    string imagesRow = imagesPaths.Select(p => $" \"{p}\"").JoinToString();
    
    ProcessStartInfo python = new()
    {
        FileName = pythonPath,
        Arguments = "-W ignore " + path + imagesRow,
        UseShellExecute = false,
        RedirectStandardOutput = true,
        StandardOutputEncoding = Encoding.UTF8 // Установка кодировки UTF-8
    };

    using Process? process = Process.Start(python);
    ArgumentNullException.ThrowIfNull(process);
    
    using StreamReader reader = process.StandardOutput;
    return reader.ReadToEnd().Split(Environment.NewLine);
}
→ Ссылка
Автор решения: Headhuntez

Чтобы узнать кодировку, можно воспользоваться методом:

>>> import locale
>>> locale.getpreferredencoding()
'cp1251'
>>>

и задать такую же кодировку стандартного вывода:

StandardOutputEncoding = Encoding.GetEncoding("Windows-1251")
→ Ссылка
Автор решения: Qwertiy

Текст в однобайтовой кодировке, если предполагается кириллица, то 1251.

А консоль эти символы в 866 вывела - вот чушь и получилась...

→ Ссылка