rust 色北欧字母切割字符串

yftpprvb  于 2022-11-12  发布在  其他
关注(0)|答案(1)|浏览(67)

我尝试的是对一个包含北欧字母的字符串进行切片,但它会抛出以下错误:
一个月一次

fn main() {
    let str = "äåö".to_string();
    println!("{}", &str[1..]);
}
e4eetjau

e4eetjau1#

第一个
这里的问题是str的索引是以字节为单位的,但它是UTF-8编码的,并且ä在UTF-8中占用了不止一个字节。因此,在1处进行切片实际上切掉了半个字符,这在Rust中是一个运行时错误。
str之所以会这样,是因为如果不对整个字符串进行迭代,就无法确定第n个字符的位置。UTF-8具有可变长度的字符,也就是说,一个字符的位置取决于前面的字符。

相关问题