c ++如何在unicode / utf8中编写/读取ofstream

时间:2011-02-17 08:24:03

标签: c++ string unicode utf-8 character-encoding

我有UTF-8文本文件,我正在使用简单的阅读:

ifstream in("test.txt");

现在我想创建一个UTF-8编码或Unicode的新文件。 如何使用ofstream或其他方式执行此操作? 这会创建ansi编码。

ofstream out(fileName.c_str(), ios::out | ios::app | ios::binary);

1 个答案:

答案 0 :(得分:6)

好的,关于便携式变体。如果你使用C++11标准就很容易(因为有很多额外的包括像"utf8",它永远解决了这个问题)。

但是如果你想使用旧标准的多平台代码,你可以使用这种方法来编写流:

  1. Read the article about UTF converter for streams
  2. 从上面的来源
  3. 向您的项目添加stxutif.h
  4. 以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();
    
  5. 然后将文件打开为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...