我尝试的是对一个包含北欧字母的字符串进行切片,但它会抛出以下错误:一个月一次
fn main() { let str = "äåö".to_string(); println!("{}", &str[1..]); }
e4eetjau1#
第一个这里的问题是str的索引是以字节为单位的,但它是UTF-8编码的,并且ä在UTF-8中占用了不止一个字节。因此,在1处进行切片实际上切掉了半个字符,这在Rust中是一个运行时错误。str之所以会这样,是因为如果不对整个字符串进行迭代,就无法确定第n个字符的位置。UTF-8具有可变长度的字符,也就是说,一个字符的位置取决于前面的字符。
str
ä
1
1条答案
按热度按时间e4eetjau1#
第一个
这里的问题是
str
的索引是以字节为单位的,但它是UTF-8编码的,并且ä
在UTF-8中占用了不止一个字节。因此,在1
处进行切片实际上切掉了半个字符,这在Rust中是一个运行时错误。str
之所以会这样,是因为如果不对整个字符串进行迭代,就无法确定第n个字符的位置。UTF-8具有可变长度的字符,也就是说,一个字符的位置取决于前面的字符。