2011-03-05 21 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

这会破坏太多的遗留代码。 –