2011-03-05 23 views
1

我正在嘗試讀取一些簡單的,具有幾個數字的簡單的unicode文件給int變量,即使經過幾個小時的搜索,我也找不到合理的解決方案任務!在Visual C++中讀取和解析簡單的Unicode字符文件

我的文件是這樣的:

1337 42 23 

因爲它是unicode的,它也有在開始爲0xFF 0xFE的BOM標記。

我試過了wifstream和fwscanf(),但都被卡住了BOM,甚至在跳過BOM之後,兩個函數都只讀了「1」(他們對0x00字符感到困惑,理解unicode)。

所以我的問題是,你如何閱讀和解析unicode Visual C++應用程序中的一個簡單的unicode文件?

這是我的源(fwscanf版):

int _tmain(int argc, _TCHAR* argv[]) 
{ 
    int x; 
    FILE * f = _wfopen(L"bla.txt", L"r+"); 
    if (!f) return -1; 

    fseek(f, 2, SEEK_SET); // skip the BOM mark 

    fwscanf(f, L"%d", &x); 
    wprintf(L"Number read: %d\n", x); 

    fclose(f); 
    return 0; 
} 

,輸出是:

Number read: 1 

回答

2

微軟CRT支持,因爲VS2005 BOM自動檢測。您可以通過在mode參數中使用「ccs」屬性來啓用它。像這樣:

FILE * f = _wfopen(L"c:\\temp\\test.txt", L"rt, ccs=UNICODE"); 

如果文件沒有BOM,則返回到ansi。你可以使用「UTF-8」或「UTF-16LE」作爲這樣的麻煩製造者。這當然是非標準的。

+0

謝謝! Mat的解決方案也可以工作,但這個更清潔一點。我想知道爲什麼unicode不是unicode應用程序中的首選編碼。然後,再次,這不是Visual Studio中第一件沒有意義的事情。 – blade

+1

這會破壞太多的遺留代碼。 –