我制作了一个程序,使用Huffman Coding来压缩和解压缩.txt文件(ANSI,Unicode,UTF-8,Big Endian Unicode ......)。
在解压缩中,我从二叉树中获取字符,然后将它们以二进制模式放入.txt中:
Ofstream F;
F.open("example.txt", ios::binary);
我必须以二进制模式写入.txt文件,因为我需要解压缩每种类型的.txt文件(不仅仅是ANSI),所以我的simbols是单个字节。
在Windows上它会放入每个simbol,但不关心Enter字符!
例如,如果我有这个example.txt文件:
Hello
World!
=)
我将它压缩到example.dat文件中,然后将Huffman树保存到另一个文件(exampletree.dat)中。
现在解压缩example.dat我从exampletree.dat中保存的树中获取字符,然后通过put()
或fwrite()
将它们放入一个新的.txt文件中,但在Windows上它将是这样的:< / p>
HelloWorld!=)
在Ubuntu上它可以正常工作并保存输入字符!
这不是代码错误,因为如果我在控制台中打印解压缩的.txt文件,它还会打印输入字符!所以Windows中存在问题!有人可以帮助我吗?
答案 0 :(得分:0)
看起来在Linux和Windows上处理EndOfLine会有所不同。 EOL可以只是“\ n”或“\ r \ n” - 即Windows通常将0x0d,0x0a放在行的末尾。 在Windows上有以下区别:
fopen( "filename", "w" );
fopen( "filename", "tw" );
报价: 在文本模式下,回车换行组合在输入时转换为单行换行,换行符转换为输出上的回车换行组合
答案 1 :(得分:0)
您是否尝试使用wordpad或任何其他高级文本编辑器(Notepad ++)打开文件,该编辑器将LF标识为换行符。默认的编辑器记事本会将它放在您描述的单行中。
这可能不是您正在寻找的解决方案。但问题似乎是由于将LF作为换行符而不是Windows默认CR / LF。