.NET Core에서 OS 코드 페이지 번호를 찾는 방법은 무엇입니까? (How to find OS code page number in .NET Core?)


문제 설명

.NET Core에서 OS 코드 페이지 번호를 찾는 방법은 무엇입니까? (How to find OS code page number in .NET Core?)

.NET Core 앱에서 Windows 기본 코드 페이지를 가져와야 합니다. 즉, 영어 시스템의 경우 1252, 키릴 자모 시스템의 경우 1251, 그리스어의 경우 1253 등입니다. 이전에는 .NET Framework 4 및 Mono에서 Encoding.Default를 통해 쉽게 수행할 수 있었습니다. 프로그램이 .NET Core 3.1로 이동한 후 이제 각 PC에서 수동으로 코드 페이지 번호를 설정해야 합니다. 일부 사용자에게는 쉽지 않습니다.

레거시(시스템) 코드 페이지의 자동 감지를 반환하는 방법은 무엇입니까? 시스템 설정을 감지하기 위해 Windows 레지스트리를 읽을 수 있는 방법은 없습니다. 앱은 Windows PC에서 받은 외부 데이터(또는 Windows PC로 보내야 함)로 Linux에서도 실행되어야 하기 때문입니다.

ANSI 코드 페이지를 사용하는 기타 소프트웨어 데이터 입력 및 출력은 다시 작성할 수 없습니다.

OEM 코드 페이지도 흥미로울 것입니다(콘솔 소프트웨어와의 원활한 상호 작용을 위해,


참조 솔루션

방법 1:

The first is a .NET Framework code, the second is its .NET Core equivalent:

//OutputEncoding = Encoding.Default;
OutputEncoding = CodePagesEncodingProvider.Instance.GetEncoding(System.Globalization.CultureInfo.CurrentCulture.TextInfo.ANSICodePage);

Long, but working correctly on both Windows and Linux.

DOS, EBCDIC and MacOS encodings can be get similarly via CurrentCulture.TextInfo.*CodePage.

방법 2:

I do not agree with Alexander Tauenis's answer.

System.Globalization.CultureInfo.CurrentCulture.TextInfo.ANSICodePage will still return the old ANSI code page number even if the user enabled the option "Beta: Use Unicode UTF‑8 for worldwide language support". In this case, the behaviors of Encoding.Default and CodePagesEncodingProvider.Instance.GetEncoding(System.Globalization.CultureInfo.CurrentCulture.TextInfo.ANSICodePage) are different.

Finding the correct code page number in .NET is not easy. Here is a correct way (but unfortunately it invokes Win32API)

In file NativeMethods.cs:

public partial class NativeMethods {

    /// Return Type: UINT‑>unsigned int
    [System.Runtime.InteropServices.DllImportAttribute("kernel32.dll", EntryPoint="GetACP")]
public static extern  uint GetACP() ;

}

and get the code page number:

var codepage = NativeMethods.GetACP()

(by Alexander TauenisAlexander TauenisSad Pencil)

참조 문서

  1. How to find OS code page number in .NET Core? (CC BY‑SA 2.5/3.0/4.0)

#.net-core #codepages #C# #text






관련 질문

.net core rc1에서 rc2로 마이그레이션할 때 이 비호환성 문제가 발생하는 이유 (Why I'm getting this incompatibilities issues migrating from .net core rc1 to rc2)

dotnet core-Logging 클래스 라이브러리 (dotnet core-Logging in class library)

Cors .Net Core 활성화 (Enable Cors .Net Core)

Enum<T>.Parse를 사용하면 정수인 모든 문자열을 구문 분석할 수 있습니다. .net 코어의 버그입니까? (Enum<T>.Parse allows parsing any string that is an integer. Is it a bug in .net core?)

.net Core: C# 코드에서 매개 변수를 전달하고 Azure 데이터 팩터리 파이프라인을 실행하는 방법은 무엇입니까? (.net Core : How to pass parameters and run Azure data factory pipeline from C# Code?)

Dotnet Core 3.1, EF1001: 내부 ef 코어 API 사용 (Dotnet Core 3.1, EF1001: internal ef core api usage)

.NET Core 작업자 서비스의 구성을 기반으로 호스팅 서비스 등록 (Register Hosted Services based on Configuration in .NET Core Worker services)

pem 및 key를 사용하여 Azure 기능에서 게시 시도 (Trying to do post from an Azure function with pem and key)

.NET Core에서 실제 통합 테스트를 작성하는 방법은 무엇입니까? (How to write real integration test in .NET Core?)

HTTP 오류 500.30 - ANCM 진행 중인 시작 실패 Asp.net-Core 3.1 (HTTP Error 500.30 - ANCM In-Process Start Failure Asp.net-Core 3.1)

.Net Core에서 NUnit 3와 Allure 통합 (Allure integration with NUnit 3 in .Net Core)

HttpClient 재시도 논리가 예상대로 작동하지 않음(.Net Core 3.1) (HttpClient retry logic not working as expected (.Net Core 3.1))







코멘트