Function core::str::from_utf8

1.0.0 (const: 1.63.0) · source ·
pub const fn from_utf8(v: &[u8]) -> Result<&str, Utf8Error>
Expand description

将字节切片转换为字符串切片。

字符串 (&str) 由字节 (u8) 组成,字节 (&[u8]) 由字节组成,因此此函数在两者之间进行转换。 并非所有的字节片都是有效的字符串切片,但是: &str 要求它是有效的 UTF-8。 from_utf8() 检查以确保字节是有效的 UTF-8,然后进行转换。

如果您确定字节切片是有效的 UTF-8,并且不想增加有效性检查的开销,则此函数有一个不安全的版本 from_utf8_unchecked,它具有相同的行为,但是会跳过检查。

如果需要 String 而不是 &str,请考虑使用 String::from_utf8

因为您可以栈分配 [u8; N],也可以使用它的 &[u8],所以此函数是具有栈分配的字符串的一种方法。在下面的示例部分中有一个示例。

Errors

如果切片不是 UTF-8,则返回 Err,并说明为什么提供的切片不是 UTF-8。

Examples

基本用法:

use std::str;

// vector 中的一些字节
let sparkle_heart = vec![240, 159, 146, 150];

// 我们知道这些字节是有效的,因此只需使用 `unwrap()`。
let sparkle_heart = str::from_utf8(&sparkle_heart).unwrap();

assert_eq!("💖", sparkle_heart);
Run

字节不正确:

use std::str;

// vector 中的一些无效字节
let sparkle_heart = vec![0, 159, 146, 150];

assert!(str::from_utf8(&sparkle_heart).is_err());
Run

有关可以返回的错误类型的更多详细信息,请参见 Utf8Error 文档。

一个栈分配的字符串:

use std::str;

// 栈分配的数组中的一些字节
let sparkle_heart = [240, 159, 146, 150];

// 我们知道这些字节是有效的,因此只需使用 `unwrap()`。
let sparkle_heart: &str = str::from_utf8(&sparkle_heart).unwrap();

assert_eq!("💖", sparkle_heart);
Run