我正在编写一个程序,它处理一些数据,将其输出到一个 .csv 文件,然后编写一个 GNUplot 脚本,并调用 GNUplot 来执行脚本并创建一个具有相同名称的图像文件(只有不同的扩展名)。文件名包含 UTF 字符(我相信是 UTF-8?),例如 °、φ 和 θ。当我使用 g++ 4.4.7 在 Linux 中编译和执行它时,所有这些都可以正常工作。然后我修改了我的代码以在 Microsoft Visual Studio 2008 中编译,当我运行程序时问题就开始了。
我使用以下两位代码
- 制作一个标准文件名字符串(我只是为各种文件添加扩展名)
打开流以写入文件(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() );
ofstream
写入的文件内容ofs
正确包含 UTF 字符,但是 stringstream-created 字符串fileName
和ostringstream
创建的文件名(即使不是使用 创建的fileName
,我也对其进行了测试)错误地显示了字符。
例子:
它应该是什么 - CDFvsRd 图 #32 - MWIR @ 300m,无太阳,30kts,θ=all°.csv
它最终是什么 - CDFvsRd 图 #32 - MWIR @ 300m,无太阳,30kts,Ï=allË .csv
我能用尽可能多的标准 C++ 做些什么来解决这个问题?将我的fileName
字符串转换为wstring
帮助吗?