1. 程式人生 > >再談C++逐行讀取文字檔案

再談C++逐行讀取文字檔案

要說使用C++逐行讀取文字檔案(通常為.txt檔案),最為常見的寫法是這樣的:

std::string strLine;  
while(getline(file,strLine))  
{
  ……
}

這裡忽略了一個重要的因素,那就是文字的編碼方式。

開啟windows自帶的記事本程式,留意觀察“儲存”對話方塊,其右下角提供了文字編碼選擇下拉列表,除了大家熟知的ANSI和UNICODE編碼,還有可以說最為常用的UTF-8編碼。

很顯然,如果讀取的文字檔案並非ANSI編碼,那麼上述程式碼恐怕就無法如你所願了。

因此,應當首先對文字編碼進行判斷,然後採取不同的處理辦法,這才是穩妥的解決思路。

根據文字檔案的頭兩個位元組,我們可以做如下的判斷:

  • 0xBBEF:UTF-8
  • 0xFEFF:UNICODE
  • 0xFFFE:UNICODE Big-Endian
  • 如果都不是,那麼ANSI

接下來,我們可以使用ifstream的getline來逐行讀取了,原因很簡單,可以指定行結束標識,對於UNICODE編碼來說,是0x000A

回到開始的程式碼,為了保持程式碼結構不變,可以用自定義的getline(比如叫GetLine)來替換string::getline。