簡體   English   中英

Windows中的C ++,我無法將Enter字符放入.txt文件中

[英]C++ in Windows I can't put the Enter character into a .txt file

我制作了一個使用霍夫曼編碼來壓縮和解壓縮.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文件,然后將霍夫曼樹保存到另一個文件(exampletree.dat)中。 現在解壓縮example.dat,我從exampletree.dat中保存的樹中提取字符,然后通過put()fwrite()將它們放入新的.txt文件中,但在Windows上將如下所示:

HelloWorld!=)

在Ubuntu上,它可以完美工作並保存Enter字符!

這不是代碼錯誤,因為如果我在控制台中打印了解壓縮的.txt文件,它還會打印輸入字符! 因此,Windows中存在問題! 有人可以幫我嗎?

看來在Linux和Windows上處理EndOfLine會有所不同。 EOL可以只是“ \\ n”或“ \\ r \\ n”-即Windows通常在行尾放置0x0d,0x0a。 在Windows上,有以下區別:

fopen( "filename", "w" );

fopen( "filename", "tw" );

quote:在文本模式下,回車-換行符組合在輸入時轉換為單個換行,換行符在輸出時轉換為回車-換行組合

您是否嘗試使用寫字板或任何其他將LF識別為換行符的高級文本編輯器(Notepad ++)打開文件。 默認的編輯器記事本會將其放在您所描述的一行中。

這可能不是您要尋找的解決方案。 但是問題似乎是由於將LF作為換行符而不是Windows默認CR / LF。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM