-1

我正在使用 SFML 用 C++ 编写游戏,我发现了一种支持法语字符的字体。但是,在程序中,我从文件中读取了所有文本以支持不同的语言,但我不知道如何将没有错误的文本提取为宽字符串。

这是我的代码:

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 ã
}
4

1 回答 1

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 achar . If you want to use the character ing the delimiter in the last call tostd::getline` 相反,那么您可以使用:

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

(当然,您应该std::getline在使用它读取的值之前验证是否成功。)

关于“它没有正确显示”:您必须提供更多关于您如何显示它的信息,以便我们确定,但在我看来,您可能只是没有灌输您的输出流具有与窗口的代码页相同的编码(假设是 Windows),或者具有窗口中使用的字体的编码(假设是 Unix)。但是,如果您想要一个完整的答案,您必须准确地向我们展示您正在展示的内容、展示方式,并向我们提供有关环境的一些信息。

于 2015-01-15T11:04:36.787 回答