即使 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 編碼的方式分享給大家,希望有幫助大家解決問題。