如何在C#中获取Windows Server宿主操作系统的默认编码
获取宿主操作系统默认编码适配遗留软件
需求
Asp.net Core应用生成的文本文件编码需匹配宿主操作系统编码,因存在无法处理UTF-8的遗留第三方软件读取这些文件。
当前情况
应用部署在配置为使用Windows-1250字符集的Windows Server上,目前采用硬编码方式:
using var writer = new StreamWriter(fileStream, Encoding.GetEncoding("windows-1250"))
问题
如何获取宿主操作系统的默认编码,无需硬编码或手动配置?
解决方案
1. 直接使用 Encoding.Default
Encoding.Default 会根据宿主平台自动返回对应编码:
- 在Windows系统上返回当前系统的ANSI编码(如你的场景中的Windows-1250)
- 在Linux/macOS等类Unix系统上返回UTF-8
替换硬编码的代码如下:
using var writer = new StreamWriter(fileStream, Encoding.Default);
2. 基于系统区域信息获取编码(Windows专属)
如果应用仅部署在Windows环境,可通过系统区域设置的代码页明确获取编码:
// 获取系统OEM代码页对应的编码 var oemCodePage = System.Globalization.CultureInfo.InstalledUICulture.TextInfo.OEMCodePage; var defaultEncoding = Encoding.GetEncoding(oemCodePage); // 或者获取系统ANSI代码页对应的编码 var ansiCodePage = System.Globalization.CultureInfo.InstalledUICulture.TextInfo.WindowsCodePage; var defaultEncoding = Encoding.GetEncoding(ansiCodePage); using var writer = new StreamWriter(fileStream, defaultEncoding);
关键说明
Encoding.Default在.NET Core/.NET 5+中已做平台适配,行为更稳定,优先推荐使用;- 跨平台部署场景下,
Encoding.Default会自动适配不同宿主的编码规则,无需额外配置; - 服务器环境下默认权限即可获取系统编码信息,无需特殊权限配置。
内容的提问来源于stack exchange,提问作者Liero
相关产品推荐
相关产品推荐

