From 6615821d2a561b45e82e54205a874e024c284a18 Mon Sep 17 00:00:00 2001 From: qiqiworld <1354092549@qq.com> Date: Wed, 12 Aug 2020 11:24:48 +0800 Subject: [PATCH] feature: allow to set encoding for reader --- ConsoleHub/ConsoleHub.csproj | 2 +- ConsoleHub/MainWindow.xaml.cs | 20 ++++++++++++++------ 2 files changed, 15 insertions(+), 7 deletions(-) diff --git a/ConsoleHub/ConsoleHub.csproj b/ConsoleHub/ConsoleHub.csproj index 40e9b04..04576e2 100644 --- a/ConsoleHub/ConsoleHub.csproj +++ b/ConsoleHub/ConsoleHub.csproj @@ -5,7 +5,7 @@ netcoreapp3.1 true Resources\AppIcon.ico - 1.3.0 + 1.4.0 diff --git a/ConsoleHub/MainWindow.xaml.cs b/ConsoleHub/MainWindow.xaml.cs index d1f1a48..19751a5 100644 --- a/ConsoleHub/MainWindow.xaml.cs +++ b/ConsoleHub/MainWindow.xaml.cs @@ -28,9 +28,8 @@ public partial class MainWindow : Window { private readonly MainViewModel ViewModel = new MainViewModel(); [DllImport("kernel32.dll", SetLastError = true)] - private static extern int GetConsoleCP(); - [DllImport("kernel32.dll", SetLastError = true)] - private static extern int GetConsoleOutputCP(); + private static extern int GetOEMCP(); + private static int codepage = GetOEMCP(); public MainWindow() { this.DataContext = ViewModel; @@ -118,6 +117,15 @@ private async Task ExecuteCommand(string fileName, string arguments) await Task.Delay(Convert.ToInt32(arguments)); return; } + if (fileName.ToLowerInvariant() == "*codepage") + { + codepage = Convert.ToInt32(arguments); + if (codepage == 0) + { + codepage = GetOEMCP(); + } + return; + } if (string.IsNullOrWhiteSpace(fileName)) { return; @@ -132,9 +140,9 @@ private async Task ExecuteCommand(string fileName, string arguments) model.Content.StartProcess(new ProcessStartInfo() { FileName = fileName, Arguments = arguments, - StandardOutputEncoding = Encoding.GetEncoding(GetConsoleOutputCP()), - StandardErrorEncoding = Encoding.GetEncoding(GetConsoleOutputCP()), - StandardInputEncoding = Encoding.GetEncoding(GetConsoleCP()) + StandardOutputEncoding = Encoding.GetEncoding(codepage), + StandardErrorEncoding = Encoding.GetEncoding(codepage), + StandardInputEncoding = Encoding.GetEncoding(codepage) }); try {