Как расширить символ в переполнении стека

Я пишу игру на 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 to
std :: getline`, тогда вы можете использовать:

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

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

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

1

Другие решения


По вопросам рекламы [email protected]