我正在寻找一种在运行时获取平台行尾字符序列(Windows 为 CRLF,Linux/macOS 为 LF)的方法。
最佳答案
我不认为有任何功能可以专门执行此操作。甚至标准库的行感知功能也没有:BufRead::read_line
被记录为仅识别 \n
和 BufRead::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/