在 Rust 中,有没有办法使用 Windows 约定在 r###"..."### 中创建文字换行符?

In Rust, is there a way to make literal newlines in r###"..."### using Windows convention?

我在 Windows 上使用 Rust,我发现

r###"abc
def"###

生成字符串 abc\ndef。有没有简单的方法可以做到abc\r\ndef?还是必须手动更换?

自 2019 年以来,Rust 编译器在读取源文件时将所有 CRLF 序列转换为 LF(参见 merge request, issue),并且无法更改此行为。

你可以做什么:

  1. 在运行时使用 .replace("\n", "\r\n") 创建带有 CRLF 行终止符的新 String
  2. 使用正则而不是原始字符串文字,并以 \r 结束行,例如
    "abc\r
    def"
    
  3. 使用 std::include_str!() 宏来包含 UTF-8 格式的文件,其中包含带有 CRLF 行终止符的文本。