当前位置: 首页 > news >正文

Encoding.RegisterProvider(CodePagesEncodingProvider.Instance)了解

Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
这行代码在 .NET Core / .NET 5+ 项目里的作用一句话就能说清楚:
把 Windows 专用的“代码页”编码(GB2312、Shift-JIS、Windows-1252 等)注册到程序里,否则 Encoding.GetEncoding 会抛 “'XXX' is not a supported encoding” 异常。
下面把来龙去脉、注意事项和常见坑一次性讲清。

  1. 为什么会有这行代码

  • .NET Core 设计之初要跨平台,而代码页(Code Page)是 Windows 的遗留概念,
    所以微软只把最通用的几种编码(UTF-8/16/32、ASCII、UTF-7)内置在 CoreFX 里。
  • 所有 Windows 代码页(GB2312 936、Big5 950、Shift-JIS 932、Windows-1252 1252 …)被移到一个单独的 NuGet 包:
    System.Text.Encoding.CodePages
  • 这个包默认不被引用,即使引用了也不会自动生效,必须手动把里面的
    CodePagesEncodingProvider 注册到全局编码表,否则 Encoding.GetEncoding("GB2312") 直接报错。

  1. 使用步骤(3 步即可)

  1. 安装包
    bash
    复制
    dotnet add package System.Text.Encoding.CodePages
     
  2. 程序启动时注册一次(放在 Main 方法最前面即可)
    csharp
    复制
    Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
     
  3. 后面就能正常用了
    csharp
    复制
    var enc = Encoding.GetEncoding("GB2312");   // 或 936
    var bytes = enc.GetBytes("中文");
     

  1. 常见疑问 / 坑

表格
复制
问题回答
只注册一次就行? 对,整个 AppDomain 只需一次,重复注册无害。
ASP.NET Core 放哪? Program.cs 的 Main() 里,或 Startup.ConfigureServices 顶部。
Linux / macOS 能用吗? 可以,CodePages 包是纯托管实现,不依赖 Windows API。
.NET Framework 项目需要吗? 不需要,Framework 本身就带代码页。
注册后性能影响? 仅第一次 GetEncoding 会查表,之后与内置编码一样快。
打包体积会变大多少? 大约 500 KB,只多一个 DLL。

  1. 完整示例

csharp
复制
using System;
using System.Text;class Program
{static void Main(){// 1. 注册代码页提供程序Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);// 2. 使用 GB2312 编码Encoding gb2312 = Encoding.GetEncoding("gb2312");byte[] bytes = gb2312.GetBytes("你好,代码页");Console.WriteLine(BitConverter.ToString(bytes));}
}
 

  1. 一句话总结

想在 .NET Core / .NET 5+ 里用 GB2312、Shift-JIS、Windows-1252 等老编码,
先装 System.Text.Encoding.CodePages 包,再在程序启动时写
Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
即可。
http://www.hskmm.com/?act=detail&tid=27178

相关文章:

  • TortoiseGit——Error:Unable to write index
  • 2025 年最新推荐超声波清洗机源头厂家排行榜:深度解析各品牌核心优势与选购指南龙门式/悬挂链/全自动/多臂式/多槽式超声波清洗机厂家推荐
  • 2025 年等离子清洗机源头厂家最新推荐排行榜:聚焦大气真空宽幅等多类型设备,精选实力口碑双优企业自动化/常压/低温/大腔体/射频等离子清洗机厂家推荐
  • 2025 年最新推荐!国内空调机组厂家权威排行榜,含冷凝热回收等多类型机组企业优选指南冷凝热回收/泳池热泵/屋顶式/海水源养殖热泵空调机组厂家推荐
  • 基于Zernike灰度矩的亚像素边缘检测实现(精度0.05 pixel)
  • 鸿蒙应用开发从入门到实战(十七):ArkUI组件List列表布局
  • 2025 最新推荐!AI 写作工具公司榜单:综合实力、用户体验与新锐品牌深度解析
  • 2025 最新推荐:AI 写小说工具公司口碑排行榜,聚焦卓越品质与新锐实力的权威指南
  • Gitee领航本土DevOps平台发展新纪元:数字化转型中的中国方案
  • 一天一款实用的AI工具,第5期,AI翻译成日语
  • 2025 年最新推荐金相厂家榜单:涵盖磨抛机 / 切割机 / 显微镜等设备,助力企业精准选品
  • Go工程打包版本号
  • C#调用matlab封装的dll报错
  • 生产设备数据采集怎么做?主要有哪些应用?
  • 2025 年编码器源头厂家最新推荐榜单:聚焦无磁 / 光学 / 脉冲 / 绝对型等多类型编码器,精选优质企业助力采购决策
  • 2025 年绝对式编码器源头厂家最新推荐榜单:增量 / 多圈 / 二进制 /ssi/ 拉线型产品优质企业全面盘点
  • go.work工作区
  • 2025 房屋改造设计公司最新推荐榜:覆盖全场景需求,精准匹配老房 / 小户型 / 局部改造优质品牌
  • 2025 年最新推荐碳纤维布源头厂家口碑排行榜:实力企业重点项目案例与选择指南全解析建筑/加固/300克/碳纤维加固布厂家推荐
  • 如何在AutoCAD中进行GIS建库?
  • Java方法的值传递机制学习笔记
  • Gitee发布MCP Server:重新定义AI赋能的代码协作新时代
  • 小程序上传文件,如发票
  • AI问答与搜索引擎:信息获取的现状
  • 2025 年别墅电梯优质厂家最新推荐排行榜:聚焦技术安全与市场口碑,助力业主精准选购家用/自建房/电梯维修/电梯加装/电梯改造/老旧小区加装电梯厂家推荐
  • 跨网文件摆渡系统是什么?你想了解的问题都在这!
  • 使用Grok获取Sora2邀请码
  • 一文详解企业如何借助AI技术重构业务基因(附发展趋势、关键能力、具体策略)
  • 课后作业一
  • SQLServer给已有数据的表增加 自增字段