【问题标题】:C++ std::stringstream/ostringstream and UTF charactersC++ std::stringstream/ostringstream 和 UTF 字符
【发布时间】:2014-07-28 14:07:25
【问题描述】:

我正在编写一个程序,它处理一些数据,将其输出到一个 .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() );
    

ofs 写入的 ofstream 文件的内容正确包含 UTF 字符,但是 stringstream 创建的字符串 fileNameostringstream 创建的文件名(即使不是使用 fileName 创建的,我测试过它)错误地显示字符。

例子:

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

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

【问题讨论】:

  • 这是否与使用 C++ 访问 unicode 文件名的一般主题有关? stackoverflow.com/questions/2316672/… 还有这个:stackoverflow.com/questions/14158018/…
  • 我想,我已经查看了您链接的两个页面,但都没有实际的解决方案。
  • @pavichokche:UTF-8 Everywhere对MSVC下如何合理处理utf-8有一些建议。不幸的是,我认为您不会找到一个好的解决方案。
  • 您能否通过在非 ASCII 所在的 输出源代码 中添加十六进制转储来修改您的问题?

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


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-03
    • 2013-11-19
    • 1970-01-01
    • 1970-01-01
    • 2011-01-19
    相关资源
    最近更新 更多