Функция from_utf8

Описание

#![allow(unused)]
fn main() {
pub const fn from_utf8(v: &[u8]) -> Result<&str, Utf8Error>
}

Преобразует срез байтов в строковый срез.

Это псевдоним для str::from_utf8.

Строковый срез (&str) состоит из байтов (u8), и срез байтов (&[u8]) также состоит из байтов, поэтому эта функция выполняет преобразование между ними. Однако не все срезы байтов являются корректными строковыми срезами: &str требует, чтобы данные были корректным UTF-8. from_utf8() проверяет, являются ли байты корректным UTF-8, и затем выполняет преобразование.

Если вы уверены, что срез байтов является корректным UTF-8, и не хотите тратить ресурсы на проверку валидности, существует небезопасная версия этой функции - from_utf8_unchecked, которая имеет такое же поведение, но пропускает проверку.

Если вам нужна String вместо &str, рассмотрите String::from_utf8.

Поскольку вы можете разместить [u8; N] в стеке и взять из него &[u8], эта функция является одним из способов получить строку, размещённую в стеке. Пример этого приведён в разделе примеров ниже.

Ошибки

Возвращает Err, если срез не является UTF-8, с описанием причины, почему предоставленный срез не является корректным UTF-8.

Примеры

Базовое использование:

#![allow(unused)]
fn main() {
use std::str;

// несколько байтов в векторе
let sparkle_heart = vec![240, 159, 146, 150];

// Мы можем использовать оператор ? (try) для проверки, являются ли байты корректными
let sparkle_heart = str::from_utf8(&sparkle_heart)?;

assert_eq!("💖", sparkle_heart);
}

Некорректные байты:

#![allow(unused)]
fn main() {
use std::str;

// несколько некорректных байтов в векторе
let sparkle_heart = vec![0, 159, 146, 150];

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

Смотрите документацию Utf8Error для получения более подробной информации о типах ошибок, которые могут быть возвращены.

"Строка, размещённая в стеке":

#![allow(unused)]
fn main() {
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);
}

Некорректные байты:

#![allow(unused)]
fn main() {
use std::str;

// несколько некорректных байтов в векторе
let sparkle_heart = vec![0, 159, 146, 150];

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

Смотрите документацию Utf8Error для получения более подробной информации о типах ошибок, которые могут быть возвращены.

"Строка, размещённая в стеке":

#![allow(unused)]
fn main() {
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);
}