2.3.1 什么是字符型?
字符型用 Rune 表示,用来存放单个字符——可以是中文、英文、数字、符号等任何 Unicode 字符。
💡TIP
Rune 可以理解为一个"超级字符",它不限于 ASCII,能表示世界上几乎所有的文字和符号。
2.3.2 字符字面量
仓颉的字符字面量以 r 开头,用单引号或双引号包裹:
Cangjie
let a: Rune = r'a' // 单引号包裹
let b: Rune = r"b" // 双引号包裹,效果一样
字符字面量有三种写法:
1. 直接写字符
最简单的方式,直接把字符放进引号里:
Cangjie
let ch1: Rune = r'仓'
let ch2: Rune = r'A'
let ch3: Rune = r'9'
2. 转义字符
有些字符无法直接写出来(比如换行、制表符),需要用 \ 转义:
| 转义写法 | 含义 | 说明 |
|---|---|---|
r'\n' |
换行 | 最常用的转义字符 |
r'\t' |
制表符 | 相当于按一次 Tab |
r'\\' |
反斜杠 \ |
因为 \ 本身是转义符号,要写两个 |
r'\'' |
单引号 ' |
在单引号内使用单引号时需要转义 |
r'\"' |
双引号 " |
在双引号内使用双引号时需要转义 |
Cangjie
let newLine: Rune = r'\n' // 换行符
let tab: Rune = r'\t' // 制表符
let slash: Rune = r'\\' // 反斜杠本身
3. 通用字符(Unicode 转义)
用 \u{十六进制数} 来表示任意 Unicode 字符,花括号内写 1~8 位十六进制数:
Cangjie
main() {
let he: Rune = r'\u{4f60}' // Unicode 4f60 = "你"
let llo: Rune = r'\u{597d}' // Unicode 597d = "好"
print(he)
print(llo)
}
运行结果:
Bash
你好
ℹ️NOTE
\u{} 中的十六进制数就是字符的 Unicode 编码值。你可以通过 Unicode 查询表找到任何字符对应的编码。
2.3.3 小结
| 写法 | 示例 | 说明 |
|---|---|---|
| 直接写字符 | r'仓' |
最直观 |
| 转义字符 | r'\n'、r'\t'、r'\\' |
用于无法直接输入的特殊字符 |
| 通用字符 | r'\u{4f60}' |
用 Unicode 编码表示任意字符 |
2.3.4 常见问题
Q1:`Rune` 和 `String` 有什么区别?
Rune表示一个字符,比如r'A'、r'仓'String表示一串字符,比如"你好"
可以理解为:String 是多个 Rune 排成一队。一个 String 可以拆分成多个 Rune,多个 Rune 可以拼成一个 String。
Q2:为什么字符前面要加 `r`?
r 是仓颉用来区分"字符"和"字符串"的标记。如果不加 r,'A' 会被当作字符串(String),而不是字符(Rune)。
Cangjie
let a = 'A' // 这是 String 类型(字符串)
let b = r'A' // 这是 Rune 类型(字符)
💡TIP
可以这样记:r = "单个字符"(Run e)。
Q3:怎么查看一个字符的 Unicode 编码?
有很多方法:
- 在搜索引擎搜索"Unicode 编码表"
- 使用在线工具,输入字符就能查到编码
- 在编程中可以用
\u{}反推
比如查"你"字的编码,搜索"你 Unicode"会告诉你它的编码是 U+4F60,所以在仓颉中写 r'\u{4f60}' 就表示"你"字。
