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

问题描述

我在 Windows 上使用 Rust,我发现

r###"abc
def"###

产生一个字符串 abc\ndef。有没有简单的方法让它abc\r\ndef?还是必须手动更换?

解决方法

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

你可以做什么:

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