Я хочу проанализировать символы UTF8 из стандартного потока вывода другого приложения в моем проекте на C #.При использовании подхода по умолчанию символы за пределами спектра ANSI повреждаются при считывании из стандартного выходного потока процесса.
Теперь, согласно Microsoft, мне нужно установить StandardOutputEncoding:
Если значением свойства StandardOutputEncoding является Nothing, процесс использует стандартную кодировку вывода по умолчанию для стандартного вывода.Свойство StandardOutputEncoding должно быть установлено до запуска процесса.Установка этого свойства не гарантирует, что процесс будет использовать указанную кодировку.Приложение должно быть протестировано, чтобы определить, какие кодировки поддерживает процесс.
Тем не менее, попробуйте, как я могу, установить для StandardOutputEncoding значение UTF8 / CP65001, при этом результат чтения при чтении в двоичный файл показывает то же самоекастрация иноязычных персонажей.Они всегда читаются как '?'(он же 0x3F) вместо того, что они должны быть.
Я знаю, что на этом этапе предполагается, что приложение, чей вывод я анализирую, просто не отправляет вывод UTF8, но это определенно нев случае, когда я пытаюсь вывести вывод приложения в файл из командной строки после принудительного перевода кодовой страницы команды в 65001, все выглядит нормально.
chcp 65001 && slave.exe > file.txt
К этому я знаю фактчто приложение slave.txt способно выплевывать стандартный вывод в кодировке UTF8, но, как я мог бы попытаться, я не могу заставить StandardOutputEncoding делать то же самое в моем приложении C #.
Каждый раз, когда яВ конце концов, я имею дело с кодированием в .NET, и мне хотелось бы вернуться в мир C ++, если бы все требовало больше работы, но было намного прозрачнее.Я обдумываю написание приложения на C для чтения выходных данных slave.txt в текстовый файл в кодировке UTF8, готовый к синтаксическому анализу C #, но сейчас я придерживаюсь этого подхода.