如何在c ++中扩展char

时间:2015-01-15 10:13:44

标签: c++ char sfml wchar wifstream

我正在使用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 ã
}

1 个答案:

答案 0 :(得分: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 char . If you want to use the character in g the delimiter in the last call to std :: getline`,然后您可以使用:

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

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

关于“它没有正确显示”: 你必须提供更多有关你如何的信息 显示它给我们确定,但似乎我可能 你只是没有灌输你的输出流相同 编码作为窗口的代码页(假设Windows),或 使用窗口中使用的字体编码(假设 Unix的)。但你必须向我们展示你到底是什么 显示,如何显示它,并给我们一些 有关环境的信息,如果你想要一个完整的答案。