2011-05-06 5 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

콘솔 모드 앱의 기본값 인 코드 페이지는 시스템 로캘에 의해 결정됩니다. 제어판 + 지역 및 언어, 관리 탭, 시스템 로캘 변경.

 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 비트 문자 인코딩이 광산 분야는 다음과 같습니다 : 귀하의 Windows 코드 페이지는이 코드가 작동에 대한 합리적인 기회가 그래서 그래서 당신의 콘솔 코드 페이지, 키릴이다. 확실히 콘솔 모드 zip 프로그램을 실행해야하는 적절한 이유가 없습니다. 사용할 수있는 .NET zip 라이브러리가 많이 있습니다.

+0

작동합니다. 고마워요! –

+0

+1, ** 업데이트 2 **이 답변이 가장 좋습니다. – Alex

3

당신은 Encoding.CodePage 프로퍼티를 필요로 : 당신에게 코드 페이지 값 (귀하의 예제에서 866)를 줄 것이다

var codePage = Console.OutputEncoding.CodePage; 

.

+0

MessageBox.Show (Console.OutputEncoding.CodePage.ToString()) -> 1251. 이것은 콘솔 응용 프로그램이 아닌 Windows Forms 응용 프로그램입니다. –

관련 문제