我有UTF-8文本文件,我正在使用简单的阅读:
ifstream in("test.txt");
现在我想创建一个UTF-8编码或Unicode的新文件。
如何使用ofstream
或其他方式执行此操作?
这会创建ansi编码。
ofstream out(fileName.c_str(), ios::out | ios::app | ios::binary);
答案 0 :(得分:6)
好的,关于便携式变体。如果你使用C++11
标准就很容易(因为有很多额外的包括像"utf8"
,它永远解决了这个问题)。
但是如果你想使用旧标准的多平台代码,你可以使用这种方法来编写流:
stxutif.h
以ANSI模式打开文件,并将BOM添加到文件的开头,如下所示:
std::ofstream fs;
fs.open(filepath, std::ios::out|std::ios::binary);
unsigned char smarker[3];
smarker[0] = 0xEF;
smarker[1] = 0xBB;
smarker[2] = 0xBF;
fs << smarker;
fs.close();
然后将文件打开为UTF
并在那里写下您的内容:
std::wofstream fs;
fs.open(filepath, std::ios::out|std::ios::app);
std::locale utf8_locale(std::locale(), new utf8cvt<false>);
fs.imbue(utf8_locale);
fs << .. // Write anything you want...