rust - 如何在 Rust 中获取当前平台的行尾字符序列?

标签 rust line-breaks

我正在寻找一种在运行时获取平台行尾字符序列(Windows 为 CRLF,Linux/macOS 为 LF)的方法。

最佳答案

我不认为有任何功能可以专门执行此操作。甚至标准库的行感知功能也没有:BufRead::read_line被记录为仅识别 \nBufRead::lines (source) ,去除行尾字符,只对 \n\r\n 这样做,不区分调用它的平台。

不过,“平台行结尾”确实是一个类别错误。文件通过网络发送并从一台计算机复制到另一台计算机。如果你的程序在记事本中写入需要在 Windows 上打开的文件,那么生成它们的程序是在 Windows 上运行还是在 Linux 上运行都没有关系;它需要发出 \r\n。同样,如果程序正在编写特定的文件格式或实现某种网络协议(protocol);格式或协议(protocol)应该告诉您使用什么行分隔符。如果格式允许并且没有约定,请选择您喜欢的一种;只需始终如一地使用它。

如果您正在阅读 行尾,您可能应该容忍其中任何一种,就像 BufRead::lines 那样。

但是,如果您真的需要,比如您的输出将被一个编写糟糕的程序读取,该程序期望在不同平台上使用不同的行结尾,您可以使用 conditional compilation实现此效果的属性:

#[cfg(windows)]
const LINE_ENDING: &'static str = "\r\n";
#[cfg(not(windows))]
const LINE_ENDING: &'static str = "\n";

关于rust - 如何在 Rust 中获取当前平台的行尾字符序列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47541191/

相关文章:

rust - 为什么完全静态的 Rust ELF 二进制文件有全局偏移表 (GOT) 部分?

rust - 有没有办法对结构的实例执行索引访问?

r - Shiny 的多行文本输入

JavaScript 添加换行符,\n 不起作用

tcp - 你如何阅读 &mut [0; 的内容? 128]?

rust - 采用任何可以产生 char 迭代器的类型,加上 &str

java -\n 不适用于换行符 -- Java

latex - 如何在 reStructuredText 的定义列表上使用强制换行来渲染 LaTeX/PDF

bash - tmux 在没有换行符的情况下将长命令打印到同一行的开头

rust - 带整数或 float 的结构