C ++ std :: stringstream / ostringstream和UTF字符

时间:2014-07-28 14:07:25

标签: c++ utf-8 stringstream ofstream ostringstream

我正在编写一个处理某些数据的程序,将其输出到.csv文件,然后编写GNUplot脚本,并调用GNUplot来执行脚本并创建一个具有相同名称的图像文件(只有不同​​的扩展名) 。文件名包含UTF字符(我相信是UTF-8?),例如°,φ和θ。当我使用g ++ 4.4.7在Linux中编译和执行它时,所有这一切都完美无缺。然后,我将我的代码更改为在Microsoft Visual Studio 2008中编译,并且在运行程序时问题就开始了。

我使用以下两位代码

  1. 制作标准文件名字符串(我只为其添加各种文件的扩展名)
  2. 打开一个流来写入文件(GNUplot脚本和.csv文件之间的唯一区别是扩展名

    // Generate a file name string
    stringstream ss;
    ss << type << " Graph #" << gID << " - " << title;
    string fileName = ss.str();
    
    // Open a stream for the output file
    ostringstream outfile;
    outfile << fileName << ".gplt" << ends;
    ofstream ofs( outfile.str().c_str() );
    
  3. ofstream写入的ofs文件的内容正确包含UTF字符,但字符串流创建的字符串fileNameostringstream创建的文件名(即使不是使用fileName创建,我测试了它)错误地显示了字符。

    示例:

      

    应该是什么 - CDFvsRd图#32 - MWIR @ 300m,无太阳,30kts,θ=全°.csv
      结果如何 - CDFvsRd图#32 - MWIR @ 300m,no-sun,30kts,Ï=allË.csv

    我可以用尽可能多的标准C ++来解决这个问题吗?将我的fileName字符串转换为wstring有用吗?

1 个答案:

答案 0 :(得分:1)

解决方案是编写代码的Windows部分,以便在没有图表标题的情况下导出文件名,省略文件名中的UTF-8字符。这不是一个真正的解决方案,只是一种解决方法。