Я пишу игру на 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 ã
}
Не очень понятно, в чем твоя проблема. Код, который вы представляете
не должен компилироваться; 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
std :: getline`, тогда вы можете использовать:
in the last call to
std::getline( settTextFile, tmp, settTextFile.widen( g ) );
(Конечно, вы должны убедиться, что std::getline
удалось
перед использованием прочитанного значения.)
Что касается «он не отображается должным образом»:
вам придется дать больше информации о том, как вы
чтобы показать это для нас, чтобы быть уверенным, но мне кажется, что
вы просто не наполнили поток вывода тем же
кодирование в качестве кодовой страницы окна (предположим, Windows), или
с кодировкой шрифта, используемого в окне (предположим,
Unix). Но вам придется показать нам именно то, что вы
показать, как вы это показываете, и дать нам немного
информация об окружающей среде, если вы хотите получить полный ответ.