Функция from_utf16
Функция from_utf16 создаёт новую строку
String из среза кодовых единиц
UTF-16. Параметром функция принимает срез
&[u16] - последовательность 16-битных
значений. Функция возвращает
Result<String, FromUtf16Error>: при
успешном преобразовании - строку
String, а если входные данные содержат
некорректную последовательность UTF-16
(например, одиночный суррогат) - ошибку.
Синтаксис
String::from_utf16(v: &[u16]) -> Result<String, FromUtf16Error>
Пример
Давайте преобразуем срез кодовых единиц UTF-16 в строку:
fn main()
{
let utf16: Vec<u16> = vec![0x0061, 0x0062, 0x0063, 0x0064, 0x0065];
let res = String::from_utf16(&utf16);
println!("{:?}", res);
}
Результат выполнения кода:
Ok("abcde")
Пример
Давайте преобразуем срез с кириллическими символами:
fn main()
{
let utf16: Vec<u16> = vec![0x041F, 0x0440, 0x0438, 0x0432, 0x0435, 0x0442];
let res = String::from_utf16(&utf16);
println!("{:?}", res);
}
Результат выполнения кода:
Ok("Привет")
Пример
Давайте попробуем преобразовать срез с одиночным суррогатом, который является некорректной последовательностью UTF-16:
fn main()
{
let utf16: Vec<u16> = vec![0xD800];
let res = String::from_utf16(&utf16);
println!("{:?}", res);
}
Результат выполнения кода:
Err(FromUtf16Error(()))
Пример
Давайте корректно обработаем результат
преобразования с помощью match:
fn main()
{
let utf16: Vec<u16> = vec![0x0031, 0x0032, 0x0033, 0x0034, 0x0035];
match String::from_utf16(&utf16)
{
Ok(s) => println!("Ok: {}", s),
Err(e) => println!("Err: {:?}", e),
}
}
Результат выполнения кода:
Ok: 12345
Смотрите также
-
класс
String,
который представляет собой UTF-8 строку -
функция
from_utf16_lossy,
которая преобразует UTF-16 с заменой некорректных символов -
функция
from_utf8,
которая создаёт строку из среза байтов UTF-8 -
функция
from_utf8_lossy,
которая преобразует UTF-8 с заменой некорректных байтов