2011-05-06 50 views
8

我需要指定正確的代碼頁來打包帶有zip庫的文件。正如我所看到的,我需要指定控制檯編碼(在我的情況下爲866)。如何獲得C#中的CMD /控制檯編碼

C:\Users\User>mode 

Status for device CON: 
---------------------- 
    Lines:   300 
    Columns:  130 
    Keyboard rate: 31 
    Keyboard delay: 1 
    Code page:  866 <- I need to get this value in C# code 

Console.OutputEncoding返回1251,這不是我所需要的。

感謝,

亞歷

更新1:顯然,在cmd.exe的執行 「模式」,並解析輸出應該工作,但它似乎太粗魯。我正在尋找.NET解決方案。

更新2:該應用程序是Windows窗體應用程序,而不是控制檯應用程序。

回答

14

默認控制檯模式應用程序的代碼頁由系統區域設置確定。控制面板+區域和語言,管理選項卡,更改系統區域設置。您的Windows代碼頁是西里爾文,那麼您的控制檯代碼頁,以便有一個合理的機會,這個代碼將工作:

 int lcid = GetSystemDefaultLCID(); 
     var ci = System.Globalization.CultureInfo.GetCultureInfo(lcid); 
     var page = ci.TextInfo.OEMCodePage; 
     // etc.. 

    [System.Runtime.InteropServices.DllImport("kernel32.dll")] 
    public static extern int GetSystemDefaultLCID(); 

避免寫這樣的代碼,8位文本編碼是一個雷區。當然沒有任何體面的理由需要運行一個控制檯模式的zip程序,有大量的.NET zip庫可用。

+0

它的工作原理,謝謝! – 2011-05-06 12:42:56

+0

+1,**更新2 **這是最好的答案 – Alex 2011-05-06 21:02:51

3

您需要Encoding.CodePage屬性:

var codePage = Console.OutputEncoding.CodePage; 

,這將給你一個代碼頁值(在您的示例866)。

+0

MessageBox.Show(Console.OutputEncoding.CodePage.ToString()) - > 1251.順便說一句,這是Windows窗體應用程序,而不是控制檯應用程序。 – 2011-05-06 11:33:11

相關問題