我需要在.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);
很长,但是在Windows和Linux上都能正常工作。
DOS,EBCDIC和MacOS编码可以类似地通过CurrentCulture.TextInfo.*CodePage
获得。