此代码可能有所帮助(它是使用VC 2010编译的).我用包含非拉丁字符的UTF-8文件测试它似乎工作,但我不知道它是否适用于中文字符.有关更多信息,请查看以下链接:
_setmode和
codecvt_utf8.
#include
#include
#include
#include
#include
#include
#include
using namespace std; // Sorry for this!
void read_all_lines(const wchar_t *filename)
{
wifstream wifs;
wstring txtline;
int c = 0;
wifs.open(filename);
if(!wifs.is_open())
{
wcerr << L"Unable to open file" << endl;
return;
}
// We are going to read an UTF-8 file
wifs.imbue(locale(wifs.getloc(), new codecvt_utf8()));
while(getline(wifs, txtline))
wcout << ++c << L'\t' << txtline << L'\n';
wcout << endl;
}
int _tmain(int argc, _TCHAR* argv[])
{
// Console output will be UTF-16 characters
_setmode(_fileno(stdout), _O_U16TEXT);
if(argc < 2)
{
wcerr << L"Filename expected!" << endl;
return 1;
}
read_all_lines(argv[1]);
return 0;
}
如果中文字符看起来不像预期的那样,请确保控制台使用的是支持UTF-16的字体(即不使用位图字体).