如何在.NET Core中查找操作系统代码页号?

Ale*_*nis 1 c# text codepages .net-core

我需要在 .NET Core 应用程序中获取 Windows 默认代码页。即英语系统上为 1252、西里尔语系统上为 1251、希腊语系统上为 1253 等。以前在 .NET Framework 4 和 Mono 中,可以通过 Encoding.Default 轻松完成。程序迁移到.NET Core 3.1后,现在需要在每台PC上手动设置代码页号。这对于某些用户来说并不容易。

如何返回旧(系统)代码页的自动检测?无法读取 Windows 注册表来检测系统设置,因为应用程序还应该在 Linux 上运行,并使用从 Windows PC 接收(或发送到 Windows PC)的外部数据。

其他使用ANSI代码页进行数据输入和输出的软件不能被重写。

也许 OEM 代码页也很有趣(为了与控制台软件无缝交互,该软件甚至仍然使用 DOS 代码页)。

Ale*_*nis 5

第一个是 .NET Framework 代码,第二个是其 .NET Core 等效代码:

//OutputEncoding = Encoding.Default;
OutputEncoding = CodePagesEncodingProvider.Instance.GetEncoding(System.Globalization.CultureInfo.CurrentCulture.TextInfo.ANSICodePage);
Run Code Online (Sandbox Code Playgroud)

很长,但在 Windows 和 Linux 上都能正常工作。

DOS、EBCDIC 和 MacOS 编码可以通过类似方式获得CurrentCulture.TextInfo.*CodePage