С++ 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 узлов, θ=all°.csv
Чем это заканчивается – CDFvsRd График №32 – MWIR @ 300 м, без солнца, 30 узлов, Ï=allË.csv

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


person pavichokche    schedule 28.07.2014    source источник
comment
Связано ли это с общей темой использования С++ для доступа к именам файлов в формате Unicode? stackoverflow.com/questions/2316672/ Также это: stackoverflow.com/questions/14158018/   -  person pzed    schedule 28.07.2014
comment
Я полагаю, и я уже просмотрел обе страницы, на которые вы ссылаетесь, но ни на одной из них нет фактического решения.   -  person pavichokche    schedule 28.07.2014
comment
@pavichokche: UTF-8 Everywhere содержит некоторые рекомендации о том, как разумно обращаться с utf-8 в MSVC. К сожалению, я не думаю, что вы найдете хорошее решение.   -  person user786653    schedule 28.07.2014
comment
Можете ли вы изменить свой вопрос, добавив шестнадцатеричный дамп как вывода, так и исходного кода, где не-ASCII?   -  person Karol S    schedule 08.10.2014


Ответы (1)


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

person pavichokche    schedule 09.10.2014