关于.net core 中的GB2312和GBK 等 除UTF类型编码 的使用


08-12  今天在调试.net core 项目遇到一点小坑

在.net core 中核心都是模块化的我倒是疏忽到这一点了  因为在平常的asp.net 中使用Encoding.GetEncoding("GB2312").GetBytes(name)就可以把字符串转化成gb2321格式的(gbk)同样如此,那么当我在项目中写下这句话的时候代码能编译通过但是并不能起到作用,并且还出现了错误(大致意思就是没有找关于gb2312的方法格式  请参阅编码的文档。RegisterProvider方法。)那么后边这个加粗的提示就是最好的解决办法,

第一;在项目中引用   System.Text.Encoding.CodePages 包

第二;在项目启动的地方加上如下代码 

 

Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);

 

然后项目运行 

 

当然你还可以通过官网上例子来测试现项目中所支持的代码页的格式

  Console.Write( "CodePage identifier and name     " );
      Console.Write( "BrDisp   BrSave   " );
      Console.Write( "MNDisp   MNSave   " );
      Console.WriteLine( "1-Byte   ReadOnly " );

      // For every encoding, get the property values.
      foreach( EncodingInfo ei in Encoding.GetEncodings() )  {
         Encoding e = ei.GetEncoding();

         Console.Write( "{0,-6} {1,-25} ", ei.CodePage, ei.Name );
         Console.Write( "{0,-8} {1,-8} ", e.IsBrowserDisplay, e.IsBrowserSave );
         Console.Write( "{0,-8} {1,-8} ", e.IsMailNewsDisplay, e.IsMailNewsSave );
         Console.WriteLine( "{0,-8} {1,-8} ", e.IsSingleByte, e.IsReadOnly );
      }

但这些都是徒劳的 因为我发现加上了nuget 包之后 他的结果也没有增加任何编码列表

这是因为  通过调用Encoding.GetEncodings方法  仅支持   上边代码所展现出来的编码

 

在.NET Framework 4.6,EncodingProvider是使否则不可用的基类可用的.NET framework 的编码方式

  1. 定义的一个子类EncodingProvider可重写两个抽象GetEncoding重载,GetEncoding(Int32)GetEncoding(String) 这些重载返回否则不受支持的编码按代码页标识符和名称。

  2. (可选) 你可以重写虚拟GetEncoding(Int32, EncoderFallback, DecoderFallback)GetEncoding(String, EncoderFallback, DecoderFallback)方法。 在大多数情况下,这不是有必要,因为基类提供了默认实现。

  3. 传递EncodingProvider到实例Encoding.RegisterProvider方法来执行由提供的编码EncodingProvider公共语言运行时可用的对象。

  4. 调用Encoding.GetEncoding重载来检索的编码。 Encoding.GetEncoding方法将调用对应EncodingProvider.GetEncoding以确定是否可以提供所请求编码。

.NET Framework 类库提供了一个静态属性, CodePagesEncodingProvider.Instance,返回EncodingProvider可以使编码的整套可用在桌面.NET Framework 类库可用的对象.NET 核心应用程序。 此外,你可以从派生EncodingProvider类以提供您自己的编码。

最后这句加粗的才是解决本次问题的重点

微软文章地址:https://msdn.microsoft.com/zh-cn/library/system.text.encodingprovider(v=vs.110).aspx

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM