如何使用qt将linux文本文件转换为Windows文本文件?

时间:2017-11-07 09:02:48

标签: c++ qt

当我使用覆盆子pi 3上的Qt将文本文件复制到USB闪存时,当我在Windows上打开这些文本文件时,文本文件'\n'字符在Windows上似乎不起作用。

我搜索了这个主题,我看到Linux和Windows上的文本文件格式不同。所以我必须将基于Linux的文本文件复制到带有Qt的Flash Memory并在Windows上打开这些文件。

2 个答案:

答案 0 :(得分:1)

有几个字符可以表示新行。通常的是这两个:

'\n' or '0x0A' (10 in decimal) -> This character is called "Line Feed" (LF).
'\r' or '0x0D' (13 in decimal) -> This one is called "Carriage return" (CR).

不同的操作系统以不同的方式处理换行符。以下是最常见的简短列表:

DOS和Windows:

他们希望换行符是两个字符的组合,即'\r\n'(或13后跟10)。

Unix(以及Linux也是如此):

Unix使用单个'\n'来表示新行。

Mac:

Mac使用单个'\r'

编辑:正如MSalters所说,Mac OSX是Unix并使用\n。单\r是古老的Mac OS9

答案 1 :(得分:0)

我猜你只是在传输文件,而不是用它做任何事情,但是我不能想到另一个选择,而不是打开它并重写行结尾。

如果在Windows上打开.txt文件并从中读取(使用c ++或c ++ / Qt),然后在将这些行写入新文件时写入行,那么行结尾应适合Windows sepcifics。

您可以像这样阅读文件:

std::ifstream file;
file.open(filePath);    

std::ofstream file2;
file2.open(filePath2); 

while(std::getline(file, line)) 
{
   file2<<line;
}

std::getline

至少文档说明getline搜索&#39; \ n&#39;它应该适用于Windows和Unix。如果没有,您仍然可以将分隔符设置为&#39; \ n&#39;。

如果你想写文件&#39; Windowslike&#39;在您的树莓上,您可以尝试更换&#39; \ n&#39;带有&#39; \ r \ n&#39;

的字符

看起来应该是这样的:

std::string myFileAsString;
std::string toReplace = "\n";
std::string replaceWith = "\r\n";
myFileAsString.replace(myFileAsString.find(toReplace), toReplace.length(), replaceWith);

在哪里搜索&#39; \ n&#39;然后将其替换为&#39; \ r \ n&#39;

replace find