C++ std::stringstream/ostringstream и символы UTF

Я пишу программу, которая обрабатывает некоторые данные, выводит их в файл.csv, затем пишет сценарий GNUplot и вызывает GNUplot для выполнения сценария и создания файла изображения с одинаковым именем (только с разными расширениями). Имена файлов содержат символы UTF (UTF-8, я полагаю?), Такие как °, φ и θ. Все это прекрасно работает, когда я компилирую и выполняю его в Linux с g++ 4.4.7. Затем я изменил свой код для компиляции в 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() );
    

Содержание ofstream файлы где ofs записи содержат символы UTF должным образом, однако строка, созданная в потоке строки fileName и ostringstream созданный файл (даже если не создан с fileNameЯ это проверял) показывать символы некорректно.

Пример:

Что это должно быть - CDFvsRd График № 32 - MWIR @ 300 м, без солнца, 30 узлов, θ = все °.csv
Чем это заканчивается - CDFvsRd Graph #32 - MWIR @ 300 м, без солнца, 30 узлов, Ï=allË.csv

Что я могу сделать, чтобы исправить это, используя как можно больше стандартного C++? Преобразовал бы мой fileName строка в wstring Помогите?

1 ответ

Решение

Решение состояло в том, чтобы написать часть кода для Windows, чтобы не экспортировать имена файлов без заголовков графиков, пропуская символы UTF-8 в имени файла. Это не было верным решением, только обходной путь.

Другие вопросы по тегам