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