C++ std::stringstream/ostringstream и символы UTF
Я пишу программу, которая обрабатывает некоторые данные, выводит их в файл.csv, затем пишет сценарий GNUplot и вызывает GNUplot для выполнения сценария и создания файла изображения с одинаковым именем (только с разными расширениями). Имена файлов содержат символы UTF (UTF-8, я полагаю?), Такие как °, φ и θ. Все это прекрасно работает, когда я компилирую и выполняю его в Linux с g++ 4.4.7. Затем я изменил свой код для компиляции в 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 должным образом, однако строка, созданная в потоке строки fileName
и ostringstream
созданный файл (даже если не создан с fileName
Я это проверял) показывать символы некорректно.
Пример:
Что это должно быть - CDFvsRd График № 32 - MWIR @ 300 м, без солнца, 30 узлов, θ = все °.csv
Чем это заканчивается - CDFvsRd Graph #32 - MWIR @ 300 м, без солнца, 30 узлов, Ï=allË.csv
Что я могу сделать, чтобы исправить это, используя как можно больше стандартного C++? Преобразовал бы мой fileName
строка в wstring
Помогите?
1 ответ
Решение состояло в том, чтобы написать часть кода для Windows, чтобы не экспортировать имена файлов без заголовков графиков, пропуская символы UTF-8 в имени файла. Это не было верным решением, только обходной путь.