.NET Core 中使用GB2312編碼報錯的問題

錯誤描述

環境

  • dotnet 2.1.4

現象

當代碼中使用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 編碼數據的解析問題仍存在。

相關文章
相關標籤/搜索