From 7de02fb4b46e5d2f3315d05612c51dc3def17bfe Mon Sep 17 00:00:00 2001 From: YangQi <70502828+YangFong@users.noreply.github.com> Date: Tue, 11 Jan 2022 18:02:39 +0800 Subject: [PATCH] doc: Replace it with a numerical description --- src/ch08-02-strings.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/ch08-02-strings.md b/src/ch08-02-strings.md index 2afbb17..331b463 100644 --- a/src/ch08-02-strings.md +++ b/src/ch08-02-strings.md @@ -187,13 +187,13 @@ error[E0277]: the trait bound `std::string::String: std::ops::Index<{integer}>` let len = String::from("Hola").len(); ``` -在这里,`len` 的值是 4 ,这意味着储存字符串 “Hola” 的 `Vec` 的长度是四个字节:这里每一个字母的 UTF-8 编码都占用一个字节。那下面这个例子又如何呢?(注意这个字符串中的首字母是西里尔字母的 Ze 而不是阿拉伯数字 3 。) +在这里,`len` 的值是 4 ,这意味着储存字符串 “Hola” 的 `Vec` 的长度是 4 个字节:这里每一个字母的 UTF-8 编码都占用 1 个字节。那下面这个例子又如何呢?(注意这个字符串中的首字母是西里尔字母的 Ze,而不是阿拉伯数字 3 。) ```rust let len = String::from("Здравствуйте").len(); ``` -当问及这个字符是多长的时候有人可能会说是 12。然而,Rust 的回答是 24。这是使用 UTF-8 编码 “Здравствуйте” 所需要的字节数,这是因为每个 Unicode 标量值需要两个字节存储。因此一个字符串字节值的索引并不总是对应一个有效的 Unicode 标量值。作为演示,考虑如下无效的 Rust 代码: +当问及这个字符是多长的时候有人可能会说是 12。然而,Rust 的回答是 24。这是使用 UTF-8 编码 “Здравствуйте” 所需要的字节数,这是因为每个 Unicode 标量值需要 2 个字节存储。因此一个字符串字节值的索引并不总是对应一个有效的 Unicode 标量值。作为演示,考虑如下无效的 Rust 代码: ```rust,ignore,does_not_compile let hello = "Здравствуйте"; @@ -238,7 +238,7 @@ let hello = "Здравствуйте"; let s = &hello[0..4]; ``` -这里,`s` 会是一个 `&str`,它包含字符串的头四个字节。早些时候,我们提到了这些字母都是两个字节长的,所以这意味着 `s` 将会是 “Зд”。 +这里,`s` 会是一个 `&str`,它包含字符串的头 4 个字节。早些时候,我们提到了这些字母都是 2 个字节长的,所以这意味着 `s` 将会是 “Зд”。 如果获取 `&hello[0..1]` 会发生什么呢?答案是:Rust 在运行时会 panic,就跟访问 vector 中的无效索引时一样: