用C ++打开Unicode文本文件并显示其内容

时间:2011-03-12 21:25:16

标签: c++ string unicode

目前我正在尝试打开以Unicode格式保存的文本文件,将其内容复制到wstring,然后在控制台上显示。因为我试图更多地了解使用字符串和打开文件,我正在一个简单的程序中进行实验。这是来源。

int main()
{
    std::wfstream myfile("C:\\Users\\Jacob\\Documents\\openfiletest.txt");
    if(!myfile.is_open())
    {
        std::cout << "error" << std::endl;
    }
    else
    {
        std::cout << "opened" << std::endl;
    }
    std::wstring mystring;
    myfile >> mystring;
    std::wcout << mystring << std::endl;
    system("PAUSE");
}

当我尝试在控制台上显示它时,它会显示■W H Y,它应该显示为什么(实际上它是“为什么不用你工作”,但我担心为什么以后它不完整我猜)。 老实说,使用Unicode对我来说并不是很重要,因为这不是我要销售的程序(更多只是为了我自己)。我确实想要熟悉它,因为最终我确实计划需要知道在C ++中使用Unicode。我也使用boost文件系统来处理目录和多线程,同时使用C ++ / cli进行GUI。我的问题:如果我现在不需要它,我真的应该使用Unicode吗?如果是这样,我如何解决这个问题,并且是否有跨平台库来处理使用不同的字符串和文件Unicode编码(使用UTF-16的Windows和使用UTF-32的Linux)。

此外,任何有关使用C ++或Unicode的Unicode的文章都会受到赞赏。这是我发现的一个,它有点帮助。The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets (No Excuses!)

感谢。

编辑:这是我刚发现的另一个有用的Reading UTF-8 Strings with C++

2 个答案:

答案 0 :(得分:2)

那是byte order mark。如果你在文件的开头找到一个,只需将其剥离。

字母之间的空格可能是因为控制台不是很宽的char友好。

答案 1 :(得分:1)

它只显示一个单词,因为myfile是一个流,operator>>只提取一个由流中的空格分隔的字符串。您可能想尝试getline功能。