[C#] StreamReader 讀取 txt 遇到中文亂碼的解決大法

在官方文件中有說明如何撰寫逐行讀取文字檔的方法,但該方法我有實際測試過,測試過程中發現如果文字檔中有中文、日文等等其他語言的話就會出現編碼錯誤也就是出現亂碼,這時可以參考以下作法來讓程式正確的讀取資料。

官方文件可以參考這裡:https://ppt.cc/fdbhpx

int counter = 0; 
string line; // Read the file and display it line by line. 
System.IO.StreamReader file = new System.IO.StreamReader(@"c:\test.txt");
while((line = file.ReadLine()) != null)
{
  System.Console.WriteLine(line); 
  counter++; 
}
file.Close();

System.Console.WriteLine("There were {0} lines.", counter); // Suspend the screen.
System.Console.ReadLine();

編碼錯誤所造成的原因是繁體中文編碼是「BIG5」,只要不是用這個編碼讀取的話很容易就會出現亂碼,這時候只要在程式裡面加入讀取時要用哪一種編碼讀取即可。主要需要更改的程式碼是這一行:

System.IO.StreamReader(@"c:\test.txt");

方法一

第一種方法是運用讀取現在的環境編碼,來達到正確編碼。
缺點:如果系統的編碼是日文或是英文的話也會造成編碼錯誤。

int counter = 0; 
string line;
System.IO.StreamReader file = new System.IO.StreamReader(@"c:\test.txt", Encoding.Default);
while ((line = file.ReadLine()) != null)
{
  System.Console.WriteLine(line);
  counter++;
}
file.Close();

方法二

第二種方法是直接指定你要讀取的檔案是哪一種編碼

int counter = 0; 
string line;
System.IO.StreamReader file = new System.IO.StreamReader(@"c:\test.txt", Encoding.GetEncoding("big5"));
while ((line = file.ReadLine()) != null)
{
  System.Console.WriteLine(line); 
  counter++;
}
file.Close();

以下兩種寫法是一樣的喔,可以參考 CodePage : http://www.lingoes.net/en/translator/codepage.htm

Encoding.GetEncoding("big5")
Encoding.GetEncoding(950)

發表迴響