08-12 今天在調試.net core 項目遇到一點小坑app
在.net core 中核心都是模塊化的我卻是疏忽到這一點了 由於在日常的asp.net 中使用Encoding.GetEncoding("GB2312").GetBytes(name)就能夠把字符串轉化成gb2321格式的(gbk)一樣如此,那麼當我在項目中寫下這句話的時候代碼能編譯經過可是並不能起到做用,而且還出現了錯誤(大體意思就是沒有找關於gb2312的方法格式 請參閱編碼的文檔。RegisterProvider方法。」)那麼後邊這個加粗的提示就是最好的解決辦法,asp.net
第一;在項目中引用 System.Text.Encoding.CodePages 包ide
第二;在項目啓動的地方加上以下代碼 模塊化
Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
而後項目運行 測試
固然你還能夠經過官網上例子來測試現項目中所支持的代碼頁的格式ui
Console.Write( "CodePage identifier and name " );
Console.Write( "BrDisp BrSave " );
Console.Write( "MNDisp MNSave " );
Console.WriteLine( "1-Byte ReadOnly " );this
// 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 );
}spa
但這些都是徒勞的 由於我發現加上了nuget 包以後 他的結果也沒有增長任何編碼列表.net
這是由於 經過調用Encoding.GetEncodings方法 僅支持 上邊代碼所展示出來的編碼
在.NET Framework 4.6,EncodingProvider是使不然不可用的基類可用的.NET framework 的編碼方式
定義的一個子類EncodingProvider可重寫兩個抽象GetEncoding重載,GetEncoding(Int32)和GetEncoding(String)。 這些重載返回不然不受支持的編碼按代碼頁標識符和名稱。
(可選) 你能夠重寫虛擬GetEncoding(Int32, EncoderFallback, DecoderFallback)和GetEncoding(String, EncoderFallback, DecoderFallback)方法。 在大多數狀況下,這不是有必要,由於基類提供了默認實現。
傳遞EncodingProvider到實例Encoding.RegisterProvider方法來執行由提供的編碼EncodingProvider公共語言運行時可用的對象。
調用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