字符存储在字符串切片中时占用多少字节?



我对 Rust 中的字符串/字符/切片感到困惑。根据文档,一个字符是 4 个字节,但是下面的程序显示一个三个字符的字符串在切片中使用 7 个字节。似乎在切片中尽可能高效地存储字符,因此常规的"A"存储为 1 个字节,两个汉字字符分别存储为 3 个字节。

fn main() {
let s = String::from("A漢字");
let ss = &s[..];
let sbytes = ss.len();
let schars = s.chars().count();
println!("{} is {} characters and {} bytes",ss,schars,sbytes);
}
$ cargo run
Finished dev [unoptimized + debuginfo] target(s) in 0.00s
Running `target/debug/test_string`
A漢字 is 3 characters and 7 bytes

我发现对于字符 c,您可以知道它们在切片中会占用字节,如下所示:

let b = c.len_utf8();

Rust 对字符串使用 UTF-8 编码。因此,String将其文本表示为 UTF-8 字节序列,而不是字符数组。这里有一个小演示:

assert_eq!("ಠ".len(), 3);
assert_eq!("ಠ".chars().count(), 1);

最新更新