Программы получают командные строки в UTF-16, ту же кодировку как .NET строк:
Arguments = "/U /K \"echo これはテストです> output.txt\"";
Это окно консоли, которая не может отображать символы за пределами его текущий кодовым / выбранный шрифт. Тем не менее, я предполагаю, что вы не хотите вызвать эхо, так что это полностью зависит от того, как программа, которую вы вызываете написано.
Некоторые справочная информация: C или программа C ++, которые используют 'узкую' (системную кодовую страницу) точка входа, например, main(int argc, char** argv)
, а не 'широкие' (UTF-16) точек входа, wmain(int argc, wchar_t** argv)
, называется с помощью заглушки, которая преобразует командную строку к системной кодовой странице -. которая не может быть UTF-8
До сих пор лучший вариант, чтобы изменить программу, чтобы использовать широкий EntryPoint, и просто получить тот же UTF-16, как у вас в вашей .NET строки. Если это не представляется возможным, то один трюк вы можете попробовать, чтобы передать его в UTF-16, что командную строку при преобразовании в системной кодовой странице является UTF-8 для символов, которые вы хотите его использовать:
Arguments = Encoding.Default.GetString(Encoding.UTF8.GetBytes(args));
Caveat Coder: Не удивляйтесь, если это идет ужасно неправильно, на вашей или чужой машине, это зависит от каждого возможного байта, действующей в текущем кодовой системе, система кодовая не будучи отличается от того, когда была начата программа, программа, которую вы используете, не используя данные для любого кодирования функции, зависящей от Windows (те, с A, W суффиксом версии), и так далее.