C++ 以二进制形式读取文本文件并在控制台中显示

Posted

技术标签:

【中文标题】C++ 以二进制形式读取文本文件并在控制台中显示【英文标题】:C++ Reading text file as binary and show it in console 【发布时间】:2012-01-11 00:53:17 【问题描述】:

我尝试将一个文本文件作为二进制文件读取,然后在控制台应用程序中呈现。 我得到了下一个结果:http://pastebin.com/gubYpAVZ

我在质疑:“为什么我有这样的符号,而我在文本文件中没有?” ,如果我在记事本中打开它 - 我只会看到“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();

最好的问候,

【问题讨论】:

oops...还没学过格式化文本,list在哪里,泛型是:list 代码缩进四个空格 你似乎对整个事情有点困惑。第一个 for 循环看起来很奇怪,你为什么还要它? 是的,这真的很奇怪......它只是过去的代码(没有删除它),谢谢你找到这样的东西 您的输入文本文件是什么样的?单个字符是 4 字节(即 UTF-32 文本文件)吗? 【参考方案1】:

一种可能是文件包含 Unicode 字符,每个字符可能有多个字节。开头的一些字符值看起来像是BOM (byte order mark) 的一部分。特别是 239, 187, 191 (0xef, 0xbb, 0xbf) 似乎表示一些 UTF-8 数据。

【讨论】:

@AndreasMagnusson:我可能错过了明显的......但我不确定你指的是什么。循环肯定是一团糟(它为每个读取的字符打印整个字符集......但它似乎仍然在拾取 BOM)。 已更改代码,运行良好!谢谢(更新版本),但我有前三个符号:239 -> я 187 -> ╗ 191 -> ┐ @MarkWilkins:是的,你是对的。我假设操作员想知道为什么他的输出如此混乱,而不仅仅是打印Hello World! 但他看到的 weird 字符很可能是 BOM,尤其是因为他使用记事本创建文件。 @user1131997:这些是指示文件是 UTF-8 的字节顺序标记。如果所有字符值都小于整数值 127,它们将只占用 UTF-8 中的单个字节。如果您使用记事本创建文件,则可以将其另存为 ANSI(另存为对话框中应该有一个编码选项)。

以上是关于C++ 以二进制形式读取文本文件并在控制台中显示的主要内容,如果未能解决你的问题,请参考以下文章

java如何把一个以文本存储的文件转化为二进制文件

怎样把文件转换成二进制形式的文本文件?

在Qt中以二进制形式读取0和1文本文件[重复]

请问啥是二进制文件 啥是ASCII 啥是文本文件 它们之间有啥区别

用C++写的二进制文件,用JAVA怎么读取?

用C++写的二进制文件,用JAVA怎么读取?