在 .NET 生态中,System.Text.Encoding.CodePages.dll 是传统代码页编码支持的重要程序集。它主要提供 CodePagesEncodingProvider,用于把 Windows 代码页编码注册到 .NET 的编码体系中。.NET Core 及后续版本默认只内置 UTF-8、UTF-16、ASCII 等有限编码,若需要处理 GB2312、GBK、GB18030、Big5、Shift-JIS、EUC-KR、Windows-1252 等编码,通常必须依赖该程序集。
Encoding.RegisterProvider(CodePagesEncodingProvider.Instance),将代码页编码器接入 Encoding.GetEncoding 查找链路。Encoding.GetEncoding(936) 或 Encoding.GetEncoding('gb2312') 可被解析。StreamReader、StreamWriter、File.ReadAllText、XmlReader、CSV/INI/日志解析等提供正确的编码转换。FileNotFoundException、FileLoadException、TypeLoadException,提示无法加载 System.Text.Encoding.CodePages 或找不到 CodePagesEncodingProvider。Encoding.GetEncoding(936)、GetEncoding('gb2312') 等可能抛出 ArgumentException 或 NotSupportedException。项目应确认已引用 System.Text.Encoding.CodePages NuGet 包,发布产物中包含对应 DLL,并在应用启动早期注册提供程序:
using System.Text;
Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
var gbk = Encoding.GetEncoding(936);
var text = File.ReadAllText("legacy.csv", gbk);
完成注册后,传统代码页文本才能被 .NET 正确编码与解码,避免跨系统交换数据时出现乱码、异常和兼容性故障。