[廚餘回收] 解決在 .NET Core 無法使用 Big5 編碼(Encoding)

即使 Unicode 發佈第一個版本至今已經超過了 30 年,現在我們還是得處理 Big5 編碼的文件,一個我們經常會遇到的情境,就是使用者上傳的 CSV 檔案是 Big5 編碼,而當我們使用 .NET Core 預設編碼讀取檔案的時候,會讀到亂碼。

這個 CSV 檔案通常是 Excel 另存出來的,在 Excel 要另存成 Unicode 編碼的 CSV 檔案,需要在存檔的時候選擇「CSV UTF-8 (逗號分隔) (*.csv)」,而一般的文書處理人員通常也不清楚什麼 Big5、Unicode 的,不熟悉的選項也不敢亂選,因此存出來的編碼大都還是 Big5。

在 .NET Core,如果我們直接使用 System.Text.Encoding.GetEncoding() 方法取得 Big5 編碼,沒意外的話,應該會收到下面這段錯誤訊息:

System.ArgumentException: ''Big5' is not a supported encoding name. For information on defining a custom encoding, see the documentation for the Encoding.RegisterProvider method. '

我用的 .NET Core 版本是 3.1,預設支援的編碼也只有 8 個:

  • DisplayName=Unicode, CodePage=1200
  • DisplayName=Unicode (Big-Endian), CodePage=1201
  • DisplayName=Unicode (UTF-32), CodePage=12000
  • DisplayName=Unicode (UTF-32 Big-Endian), CodePage=12001
  • DisplayName=US-ASCII, CodePage=20127
  • DisplayName=Western European (ISO), CodePage=28591
  • DisplayName=Unicode (UTF-7), CodePage=65000
  • DisplayName=Unicode (UTF-8), CodePage=65001

所以我們需要額外安裝 CodePage,我們到 NuGet 找到 System.Text.Encoding.CodePages 把它裝起來,裝好之後使用 Encoding.RegisterProvider() 方法將 CodePage Provider 註冊進去,這樣就有 Big5 編碼可以用了。

又或者,也可以直接使用 CodePagesEncodingProvider.Instance.GetEncoding() 方法取得 Big5 編碼。

以上,在 .NET Core 使用 Big5 編碼的方式分享給大家,希望有幫助大家解決問題。

相關資源

C# 指南
ASP.NET 教學
ASP.NET MVC 指引
Azure SQL Database 教學
SQL Server 教學
Xamarin.Forms 教學