在 .NET Framework 4.7.2 中,Encoding.GetEncoding("GBK") 方法仍然可以使用,并返回 GBK 编码的编码器。但是,在 .NET Core 3.0 及更高版本中,Encoding.GetEncoding("GBK") 方法已被弃用,并且不再支持 GBK 编码。
解决
- 使用 Encoding.GetEncoding(936) 方法来获取 GBK 编码的编码器
- 使用CodePagesEncodingProvider 该类继承于EncodingProvider 用于支持原Framework中代码页的访问权限 也就是编码方式
使用方法:
在.net core中仅需在Configure中添加即可// 注册编码提供程序 Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
using System.Text; using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Hosting; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Hosting; public class Startup { public void ConfigureServices(IServiceCollection services) { // 添加 MVC 服务 services.AddControllersWithViews(); } public void Configure(IApplicationBuilder app, IWebHostEnvironment env) { if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); } else { app.UseExceptionHandler("/Home/Error"); } // 注册编码提供程序 Encoding.RegisterProvider(CodePagesEncodingProvider.Instance); app.UseStaticFiles(); app.UseRouting(); app.UseEndpoints(endpoints => { endpoints.MapControllerRoute( name: "default", pattern: "{controller=Home}/{action=Index}/{id?}"); }); } }