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

问题描述 投票:0回答:2

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

rust line-breaks
2个回答
18
投票

我不认为有任何功能可以专门执行此操作。即使标准库的行感知功能也不会:

BufRead::read_line
被记录为仅识别
\n
,而
BufRead::lines
(源)
(它会去除行尾字符)仅这样做对于
\n
\r\n
,不区分在哪个平台上调用它。

不过,“站台线路结束”确实是一个类别错误。文件通过网络发送并从一台计算机复制到另一台计算机。如果你的程序写入需要在 Windows 上用记事本打开的文件,那么生成它们的程序是运行在 Windows 还是 Linux 上并不重要;它需要发出

\r\n
。同样,如果程序正在编写特定的文件格式或实现某些网络协议;格式或协议应该告诉您使用什么行分隔符。如果格式允许并且没有约定,请选择您喜欢的;只要坚持使用即可。

如果您正在阅读行结尾,您可能应该容忍其中任何一个,就像

BufRead::lines
一样。

但是,如果您确实需要,例如如果您的输出将被一个编写得不好的程序读取,该程序期望在不同平台上有不同的行结尾,您可以使用条件编译属性来实现此效果:

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

0
投票

在您可能认为自己明确关心的情况下,您可能不应该像内置的 String::lines() 那样。

© www.soinside.com 2019 - 2024. All rights reserved.