前言

前一份工作因為是做產品,較少遇到文字檔案編碼問題 (多數使用 UTF8)。最近在做 POC 的時需要讀入 csv 檔案,而遇到 BIG5 格式導致資料庫亂碼問題,簡單紀錄一下解決方法,提供有興趣的朋友參考。 本篇文章若有錯誤或任何建議,請各位先進不吝提出,謝謝。





介紹

C# 在處理讀取檔案時,我們會透過 StreamReader 方法取得檔案內文字資訊。
using (var reader = new StreamReader("C:\\PFE\\Employee.csv", Encoding.GetEncoding(950), true))
{<
    var line = reader.ReadToEnd();
    Console.WriteLine(line);
}



在政府開放資料中,有許多資料格式仍為 BIG5,倘若資料庫格式不相同,可能會導致資料變成亂碼。下列文字範例與讀取結果:




我們可以在 StreamReader 增加參數,確認讀取資料時的格式。指定讀取時為 BIG5 格式為:Encoding.GetEncoding(950)

完整程式如下:
using (var reader = new StreamReader("C:\\PFE\\Employee.csv", Encoding.GetEncoding(950), true))
{
    var line = reader.ReadToEnd();
    Console.WriteLine(line);
}


相同的檔案,讀取結果如下:


注意:如果你得到 System.NotSupportedException: No data is available for encoding 950 錯誤訊息,你可以加上 Encoding.RegisterProvider(CodePagesEncodingProvider.Instance); 解決這個問題,主要原因在於 .NET Core 簡化了編碼。

Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);

using (var reader = new StreamReader("C:\\PFE\\Employee.csv", Encoding.GetEncoding(950), true))
{
    var line = reader.ReadToEnd();
    Console.WriteLine(line);
}