C++文本文件二进制读取及其在控制台中的显示

C++文本文件二进制读取及其在控制台中的显示,c++,windows,binary,console,C++,Windows,Binary,Console,我尝试读取一个二进制文本文件,然后在控制台应用程序中呈现它。 我得到了下一个结果: 我在问:为什么我有这样的符号,我在文本文件中没有,如果我用记事本打开它,我只会看到Hello World!不再。。。其他符号是什么 以下是代码: ifstream in("C:\\dev\\1.txt", ios::in | ios::binary); list<int> mylist1; list<int>::iterator it; while(!in.eof()) {

我尝试读取一个二进制文本文件,然后在控制台应用程序中呈现它。 我得到了下一个结果:

我在问:为什么我有这样的符号,我在文本文件中没有,如果我用记事本打开它,我只会看到Hello World!不再。。。其他符号是什么

以下是代码:

ifstream in("C:\\dev\\1.txt", ios::in | ios::binary);    
list<int> mylist1;
list<int>::iterator it;


while(!in.eof())
{
    mylist1.push_back(in.get());
};

for(it = mylist1.begin(); it != mylist1.end(); it++)
{
    cout << *it << " -> " << (char)*it << endl;
};


in.close();


请注意,

一种可能是文件包含Unicode字符,每个字符可能有多个字节。一些字符值在开始时看起来像是。特别是,239、187、191 0xef、0xbb、0xbf似乎表示一些UTF-8数据。

一种可能是文件包含Unicode字符,每个字符可能有多个字节。一些字符值在开始时看起来像是。特别是,2391871910xef,0xbb,0xbf似乎表示一些UTF-8数据。

oops。。。还没有学会如何格式化文本,其中list是,泛型类型是:list只需将代码缩进四个空格,您似乎对整个事情有点困惑。第一个for循环看起来很奇怪,为什么你有它?是的,它真的很奇怪。。。这只是过去的代码没有删除它,谢谢你找到这样的东西你的输入文本文件是什么样子的?单个字符是否为4字节,即UTF-32文本文件?oops。。。还没有学会如何格式化文本,其中list是,泛型类型是:list只需将代码缩进四个空格,您似乎对整个事情有点困惑。第一个for循环看起来很奇怪,为什么你有它?是的,它真的很奇怪。。。这只是过去的代码没有删除它,谢谢你找到这样的东西你的输入文本文件是什么样子的?单个字符是否为4字节,即UTF-32文本文件?@AndreasMagnusson:我可能缺少明显的。。。但我不确定你指的是什么。循环绝对是乱七八糟的,它为每个读取的字符打印整个字符集。。。但它似乎仍然在收集BOM。如果更改了代码,它工作得很好!谢谢更新版本,但我有前三个符号:239->╗ 191 -> ┐@马克威尔金斯:是的,你说得对。我猜想op想知道为什么他的输出如此混乱,而不仅仅是打印Hello World!但他看到的奇怪字符很可能是BOM,尤其是因为他使用记事本创建了文件。@user1131997:这些是字节顺序标记,表示文件是UTF-8。如果所有字符值都小于整数值127,则它们将只接受UTF-8中的一个字节。如果是用记事本创建的文件,可以将其另存为ANSI“另存为”对话框中应有一个编码选项。@AndreasMagnusson:我可能缺少明显的。。。但我不确定你指的是什么。循环绝对是乱七八糟的,它为每个读取的字符打印整个字符集。。。但它似乎仍然在收集BOM。如果更改了代码,它工作得很好!谢谢更新版本,但我有前三个符号:239->╗ 191 -> ┐@马克威尔金斯:是的,你说得对。我猜想op想知道为什么他的输出如此混乱,而不仅仅是打印Hello World!但他看到的奇怪字符很可能是BOM,尤其是因为他使用记事本创建了文件。@user1131997:这些是字节顺序标记,表示文件是UTF-8。如果所有字符值都小于整数值127,则它们将只接受UTF-8中的一个字节。如果使用记事本创建文件,则可以将其另存为ANSI。另存为对话框中应有一个编码选项。