在 C++ 中打开 Unicode 文本文件并显示其内容
Posted
技术标签:
【中文标题】在 C++ 中打开 Unicode 文本文件并显示其内容【英文标题】:Opening Unicode text files in C++ and displaying their contents 【发布时间】:2011-03-12 21:25:16 【问题描述】:目前我正在尝试打开一个以 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(实际上是“为什么你不工作”,但我想我以后会担心它为什么不完整)。 老实说,使用 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++
【问题讨论】:
Problem in writing wstring to a file for hebrew/arabic language的可能重复 【参考方案1】:那是byte order mark。如果您在文件的开头找到一个,只需将其剥离即可。
字母之间的空格可能是因为控制台不是很宽的字符友好。
【讨论】:
【参考方案2】:它只显示一个单词,因为myfile
是一个流,而operator>>
只从流中提取一个由空格分隔的字符串。您可能想尝试getline
函数。
【讨论】:
以上是关于在 C++ 中打开 Unicode 文本文件并显示其内容的主要内容,如果未能解决你的问题,请参考以下文章
Unicode / UTF-8文本文件:Windows控制台上的乱码(试图显示希伯来语)