Skip to Content

字符串(String)

字符串写在双引号里,是 UTF-8 文本。它的完整形态有四种,见下表:

写法转义插值跨行
"..."支持无无
$"..."支持支持无
r"..." / r#"..."#无无支持
r$"..." / r$#"..."#无支持支持

转义全集

普通字符串与 $ 插值串支持以下转义(与 char 字面量同表):

转义含义
\n \r \t \0换行、回车、制表、空字符
\ \" \'反斜杠、双引号、单引号
\xHH恰好两位十六进制的码位
\u{HEX}花括号内任意位十六进制;超出 10FFFF 或落入代理区报 MS1004

非法转义报 MS1004,但仍会被消费掉。普通字符串不能跨行:源码里的真实换行按未终止处理。

raw 字符串

raw 字符串(r 开头)不认转义、不插值,写什么就是什么,字面段可直接跨行。# 数量须闭合配对,非配对的 " 是普通字符,所以 r#"..."# 里可以带 ":

val path = r"C:\Users\Mushreb"; print(path); val poem = r#"第一行 第二行 "带引号" 第三行"#; print(poem);
C:\Users\Mushreb 第一行 第二行 "带引号" 第三行

r 后必须紧跟 " 或 #" 才触发 raw,否则 r 按普通标识符解析。字符串里要同时有转义、跨行和插值时,用 r$#"..."#(见字符串插值)。

注意

  • 字符串不可变:没有任何方法能改一个已有的字符串,所有「变形」都产出新串;
  • 字符串长度按字形簇计,"a🙂b" 的长度是 3,细节见 Unicode 与字形簇;
  • 查、切、变形、格式化等操作面集中在文本处理一页;
  • 字符串到数值的解析不走转换,走 T(v) 解析通道(int(s) 等,见类型转换)。
最后更新于 2026年10月7日