Как расширить символ в C++

Я пишу игру на C++ с использованием SFML, я нашел шрифт, который поддерживает французские символы. Тем не менее, в программе я читаю весь текст из файлов, чтобы иметь возможность поддерживать разные языки, но я не знаю, как извлечь текст без ошибок в широкие строки.

Вот мой код:

using namespace std;
using namespace sf;

void SettingsW :: initialize()
{

// using normal characters it reads the files correctly

    wifstream settTextFile;
    settTextFile.open(pageTextSource);
    wstring temp;

    getline(settTextFile, temp);
    pageTitle.setFont(pageFont);
    pageTitle.setString(temp);

    getline(settTextFile, temp, L' ');
    languageTitle.setFont(pageFont);
    languageTitle.setString(temp);

//here is the problem
    char g=' ';
    ios::widen(g);
    getline(settTextFile, temp, ' '));  
// I want to use get line with this delimiter and when I use the L the error goes away 
//but it doesn't display properly: é is displayed as ã
}

1 ответ

Не очень понятно, в чем твоя проблема. Код, который вы представляете, не должен компилироваться; ios::widen является функцией-членом, и может быть вызван только на ios (который является typedef дляstd::basic_ios<char>из которых у вас нет экземпляра в вашем коде). Также, ios::widen возвращает расширенный символ, за исключением того, что ios::widen (в отличие отstd::basic_ios<wchar_t>::widen) doesn't widen, since it returns aголец. If you want to use the character inгthe delimiter in the last call tostd::getline`, тогда вы можете использовать:

std::getline( settTextFile, tmp, settTextFile.widen( g ) );

(Конечно, вы должны убедиться, что std::getline успешно перед использованием значения, которое он прочитал.)

Что касается "он не отображается должным образом": вам нужно будет дать больше информации о том, как вы отображаете его, чтобы мы были уверены, но мне кажется, что вы просто не пропитали свой вывод поток с той же кодировкой, что и кодовая страница окна (предположим, Windows), или с кодировкой шрифта, используемого в окне (предположим, Unix). Но вам нужно будет показать нам именно то, что вы показываете, как вы это показываете, и дать нам некоторую информацию об окружающей среде, если вы хотите получить полный ответ.

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