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 的編碼方式
-
定義的一個子類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