【问题标题】:How can i convert linux text file to windows text file by using qt?如何使用 qt 将 linux 文本文件转换为 windows 文本文件?
【发布时间】:2017-11-07 09:02:48
【问题描述】:

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

我搜索了这个主题,发现 Linux 和 Windows 上的文本文件格式不同。所以我必须使用 Qt 将基于 Linux 的文本文件复制到闪存并在 Windows 上打开这些文件。

【问题讨论】:

  • \r\n 怎么样?

标签: c++ qt


【解决方案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 使用单个 '\r'。

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

【讨论】:

  • Mac OSX 是 Unix 并且使用 \n。单\r是古老的Mac OS9。
【解决方案2】:

我猜你只是在传输文件,没有对它做任何事情,但我想不出除了打开它并重写行尾之外的其他选择。

如果您在 Windows 上打开 .txt 文件并从中读取(使用 c++ 或 c++/Qt),然后在将行写入新文件时将它们写入新文件,则行尾应符合 Windows 规范。

你可以这样读取文件:

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

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

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

std::getline

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

如果你想在你的 raspberry 上写 'Windowslike' 文件,你可以尝试将 '\n' 字符替换为 '\r\n'

它应该看起来像这样:

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

在哪里 find 搜索 '\n' 然后用 '\r\n' 替换它

replace find

【讨论】:

    猜你喜欢
    • 2012-04-29
    • 1970-01-01
    • 2015-03-30
    • 1970-01-01
    • 2021-05-03
    • 2012-06-22
    • 1970-01-01
    • 2014-01-19
    • 2019-10-07
    相关资源
    最近更新 更多