Я пишу программу, которая обрабатывает некоторые данные, выводит их в файл .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 узлов, θ=all°.csv
Чем это заканчивается – CDFvsRd График №32 – MWIR @ 300 м, без солнца, 30 узлов, Ï=allË.csv
Что я могу сделать, чтобы исправить это, используя как можно больше стандартного С++? Поможет ли преобразование моей строки fileName
в wstring
?