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

3
目前我正在尝试打开一个以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,而不是应该显示的WHY(实际上应该是“WHY WONT YOU WORK”,但我想我稍后再担心为什么它不完整)。 老实说,对我来说使用Unicode并不是非常重要,因为这不是我将出售的程序(更多只是为了自己)。不过,我确实想熟悉一下它,因为最终我确实计划需要在C++中使用Unicode的知识。我还在使用boost文件系统处理目录和多线程,同时使用C++/cli进行GUI开发。我的问题是:如果我现在不需要Unicode,我真的需要费心使用它吗?如果需要,我该如何解决这个问题,并且是否有跨平台库来处理使用不同Unicode编码的字符串和文件(Windows使用UTF-16,Linux使用UTF-32)。
此外,任何关于C++中Unicode或Unicode的文章都将受到赞赏。这是我找到的一篇文章,它有所帮助。The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets (No Excuses!) 谢谢。
编辑:我刚刚找到了另一篇有用的文章使用C++读取UTF-8字符串

2个回答

2
那是一个字节顺序标记。如果你在文件开头发现了它,只需将其删除。
而字母之间的空格可能是因为控制台不太友好于宽字符。

1

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接