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 代码页)。
第一个是 .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。