當代碼中使用ide
System.Text.Encoding.GetEncoding("GB2312") //或者 System.Text.Encoding.GetEncoding("GBK")
會拋出異常:函數
Unhandled Exception: System.ArgumentException: 'GB2312' is not a supported encoding name. For information on defining a custom encoding, see the documentation for the Encoding.RegisterProvider method.編碼
或者rest
Unhandled Exception: System.ArgumentException: 'GBK' is not a supported encoding name. For information on defining a custom encoding, see the documentation for the Encoding.RegisterProvider method.code
使用以下代碼檢查支持的編碼:orm
System.Text.Encoding.GetEncodings();
發現得到的編碼中沒有GB2312或者GBK。對象
第一步get
向項目中添加以下包:io
System.Text.Encoding.CodePagesform
根據 System.Text.Encoding.CodePages nuget主頁 的描述,這個包能爲程序提供 Windows-1252, Shift-JIS, and GB2312 三種編碼。
Provides support for code-page based encodings, including Windows-1252, Shift-JIS, and GB2312.
因此導入這個包以後,咱們將能使用 GB2312 編碼。
在 .csproj
文件中應添加以下代碼:
<ItemGroup> <PackageReference Include="System.Text.Encoding.CodePages" Version="4.4.0" /> </ItemGroup>
或者在項目目錄執行以下命令:
dotnet add package System.Text.Encoding.CodePages --version 4.4.0
固然,其中的版本號須要自行修改成最新。此時(2018.02.22)最新版是4.4.0 。
別忘了執行 dotnet restore
。
第二步
根據錯誤提示,咱們須要對引用的編碼使用 Encoding.RegisterProvider
函數進行註冊。
在使用 System.Text.Encoding.GetEncoding ("GB2312")
以前,在代碼中執行:
System.Text.Encoding.RegisterProvider (System.Text.CodePagesEncodingProvider.Instance);
註冊完以後,獲取 GB2312 編碼對象就不會報錯了,而且能夠正常使用其中的函數。
至此咱們解決了關於 GB2312 編碼的問題。可是程序中仍然沒法使用 GBK 編碼。針對 GBK 編碼數據的解析問題仍存在。