2009-05-23 88 views
7

我有一個簡單的問題要問。我有一個以FFFE開頭的UTF 16文本文件。什麼是C++工具來處理這種文件?我只想讀取它,過濾一些行並顯示結果。閱讀Unicode文件C++

它看起來很簡單,但我只是在使用簡單的ascci文件工作的經驗,我很着急。我正在使用VS C++,但我不想使用託管C++。

問候

這裏,把一個非常簡單的例子

wifstream file; 
file.open("C:\\appLog.txt", ios::in); 

wchar_t buffer[2048]; 
file.seekg(2); 
file.getline(buffer, bSize-1); 

wprintf(L"%s\n", buffer); 
file.close(); 

回答

2

您可以使用fgetws,其內容爲16位字符。您的文件採用小端,字節順序。由於x86機器也是小端,你應該能夠處理文件,而不會有太多麻煩。當你想要輸出時,使用fwprintf

此外,我同意更多信息可能會有用。例如,你可能正在使用一個抽象出一些這樣的庫。

+0

是的,你說的都是,更多的信息可能會有用。我嘗試了msdn,Jeffrey Richter的書,但是在談論這個主題時,他們似乎沒有很好的例子。謝謝 – Andres 2009-05-23 13:07:48

0

的FFFE只是初始BOM(字節順序標記)。只需像通常那樣從文件中讀取數據,然後將其轉換爲寬字符緩衝區。

+0

示例代碼始終是一個好主意 - 你怎麼知道他是如何正常讀取文件? – 2009-05-23 12:53:51

+0

雖然我同意你的看法,但是安德烈斯說:「但我只是在使用簡單的ascci文件方面有經驗。」 ;) – xian 2009-05-23 13:08:23

1

由於您很着急,請在二進制模式下使用ifstream並完成您的工作。我和你有同樣的問題,這節省了我的一天。 (它不是一個推薦的解決方案,當然,它只是一個黑客)

ifstream file; 
    file.open("k:/test.txt", ifstream::in|ifstream::binary); 

    wchar_t buffer[2048]; 
    file.seekg(2); 
    file.read((char*)buffer, line_length); 
    wprintf(L"%s\n", buffer); 
    file.close();