UTF-8 与字符
处理 Unicode
UTF-8 与字符 是 CoddyKit 上的免费 Learn Rust Coding 课时。 这是第 4 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Learn Rust Coding 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Learn Rust Coding 课程共包含 4 节课。
Rust 字符串采用 UTF-8
每个 Rust String 和 &str 都以 UTF-8 编码。这意味着文本可以包含任何 Unicode 字符,而不仅仅是 ASCII。
fn main() {
let s = String::from("caf\u{e9}");
println!("{}", s);
}什么是 UTF-8
UTF-8 使用一到四个字节编码每个 Unicode 字符;ASCII 字符使用一个字节,带重音符号的字母和表情符号则使用更多字节。
fn main() {
let ascii = "A"; // 1 byte
let accent = "\u{e9}"; // 2 bytes (e-acute)
println!("{} bytes vs {} bytes", ascii.len(), accent.len());
}字节与字符
由于采用多字节编码,len() 返回的是字节数,而字符数可能更少。
fn main() {
let s = "caf\u{e9}";
println!("bytes {}", s.len());
println!("chars {}", s.chars().count());
}char 类型是 Unicode
Rust 的 char 是一个 4 字节值,可以容纳任意 Unicode 标量值,远不止一个字节所能表示的范围。
fn main() {
let letter = 'Z';
let accented = '\u{f1}'; // n with tilde
println!("{} {}", letter, accented);
}迭代字符
使用 chars() 按字符遍历文本。它可以正确处理多字节字符。
fn main() {
let s = "a\u{e9}z";
for c in s.chars() {
println!("{}", c);
}
}为什么不能按数字索引
Rust不允许对字符串使用 s[0]。由于字符占用的字节数不同,按单个数字进行索引会产生歧义,也不安全。
fn main() {
let s = "hello";
// let c = s[0]; // error: cannot index a str
let first = s.chars().next().unwrap();
println!("{}", first);
}获取第 nth 个字符
使用迭代器方法 nth 按位置获取字符。它会返回一个 Option。
fn main() {
let s = "abcdef";
let third = s.chars().nth(2);
println!("{:?}", third);
}迭代字节
确实需要原始字节时,请使用 bytes(),它会生成 u8 值。
fn main() {
let s = "AB";
for b in s.bytes() {
println!("{}", b);
}
}在字节边界上切片
字符串切片使用字节索引。切片必须落在有效的字符边界上,否则程序会崩溃。
fn main() {
let s = "hello";
let part = &s[0..3]; // valid ASCII boundary
println!("{}", part);
}char 方法
char 类型提供了一些实用方法,例如 is_alphabetic、is_numeric 和 to_uppercase。
fn main() {
let c = 'k';
println!("alpha {} numeric {}", c.is_alphabetic(), c.is_numeric());
println!("upper {}", c.to_uppercase());
}统计特定字符
将 chars 与 filter 结合,即可统计符合某个条件的字符。
fn main() {
let s = "banana";
let a_count = s.chars().filter(|&c| c == 'a').count();
println!("a appears {} times", a_count);
}快速检查
回顾字符串长度为什么可能与您的预期不同。
总结
Rust 中的 UTF-8 与 chars:
- 字符串采用 UTF-8 编码;字符使用 1 到 4 个字节。
len()返回字节数;chars().count()返回字符数。- 不能按数字索引字符串;请使用
chars()或nth。 - 切片必须落在字符边界上。
fn main() {
let s = "sm\u{ee}le";
println!("bytes {} chars {}", s.len(), s.chars().count());
for c in s.chars() {
print!("{} ", c);
}
println!();
}用 AI 导师学习 Rust — 免费
在浏览器中编写并运行真实代码,获得全天候 AI 导师的即时帮助,并在网页或应用中继续学习。
- 课程
- 39
- 课程
- 144
常见问题解答
「UTF-8 与字符」课时是免费的吗?
是的 — 「UTF-8 与字符」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Learn Rust Coding 课程的其余内容,请升级到 CoddyKit PRO。 Learn Rust Coding 课程共包含 4 节课。
「UTF-8 与字符」这节课中我会学到什么?
处理 Unicode 你通过在浏览器中直接运行的动手代码来练习 Learn Rust Coding,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 Learn Rust Coding 需要有经验吗?
无需任何先前经验。CoddyKit 上的 Learn Rust Coding 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 4 节课,共 4 节。
「UTF-8 与字符」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 Learn Rust Coding 课中编写并运行代码吗?
能。每节 Learn Rust Coding 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。
此课程中的所有课时
- String 与 &str 的区别
- 切片
- 字符串方法
- UTF-8 与字符