Struct core::str::Utf8Error

1.0.0 · source ·
pub struct Utf8Error { /* private fields */ }
Expand description

尝试将 u8 的序列解释为字符串时可能发生的错误。

这样,例如 String&strfrom_utf8 系列函数和方法都利用了此错误。

Examples

此错误类型的方法可用于创建类似于 String::from_utf8_lossy 的功能,而无需分配堆内存:

fn from_utf8_lossy<F>(mut input: &[u8], mut push: F) where F: FnMut(&str) {
    loop {
        match std::str::from_utf8(input) {
            Ok(valid) => {
                push(valid);
                break
            }
            Err(error) => {
                let (valid, after_valid) = input.split_at(error.valid_up_to());
                unsafe {
                    push(std::str::from_utf8_unchecked(valid))
                }
                push("\u{FFFD}");

                if let Some(invalid_sequence_length) = error.error_len() {
                    input = &after_valid[invalid_sequence_length..]
                } else {
                    break
                }
            }
        }
    }
}
Run

Implementations§

source§

impl Utf8Error

1.5.0 (const: 1.63.0) · source

pub const fn valid_up_to(&self) -> usize

返回给定字符串中的索引,直到对其进行有效 UTF-8 验证为止。

它是使 from_utf8(&input[..index]) 返回 Ok(_) 的最大索引。

Examples

基本用法:

use std::str;

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

// std::str::from_utf8 返回一个 Utf8Error
let error = str::from_utf8(&sparkle_heart).unwrap_err();

// 第二个字节在这里无效
assert_eq!(1, error.valid_up_to());
Run
1.20.0 (const: 1.63.0) · source

pub const fn error_len(&self) -> Option<usize>

提供有关失败的更多信息:

  • None: 意外到达输入的结尾。 self.valid_up_to() 是从输入的末尾开始的 1 到 3 个字节。 如果字节流 (例如文件或网络套接字) 正在以增量方式进行解码,则这可能是有效的 char,其 UTF-8 字节序列跨越了多个块。

  • Some(len): 遇到意外字节。 提供的长度是从 valid_up_to() 给定的索引处开始的无效字节序列的长度。 如果有损解码,则应在该序列之后 (插入 U+FFFD REPLACEMENT CHARACTER 之后) 恢复解码。

Trait Implementations§

source§

impl Clone for Utf8Error

source§

fn clone(&self) -> Utf8Error

返回值的副本。 Read more
source§

fn clone_from(&mut self, source: &Self)

source 执行复制分配。 Read more
source§

impl Debug for Utf8Error

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

使用给定的格式化程序格式化该值。 Read more
source§

impl Display for Utf8Error

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

使用给定的格式化程序格式化该值。 Read more
source§

impl Error for Utf8Error

source§

fn description(&self) -> &str

👎Deprecated since 1.42.0: use the Display impl or to_string()
1.30.0 · source§

fn source(&self) -> Option<&(dyn Error + 'static)>

此错误的下级来源 (如果有)。 Read more
source§

fn cause(&self) -> Option<&dyn Error>

👎Deprecated since 1.33.0: replaced by Error::source, which can support downcasting
source§

fn provide<'a>(&'a self, demand: &mut Demand<'a>)

🔬This is a nightly-only experimental API. (error_generic_member_access #99301)
提供对用于错误报告的上下文的基于类型的访问。 Read more
source§

impl PartialEq<Utf8Error> for Utf8Error

source§

fn eq(&self, other: &Utf8Error) -> bool

此方法测试 selfother 值是否相等,并由 == 使用。
source§

fn ne(&self, other: &Rhs) -> bool

此方法测试 !=。 默认实现几乎总是足够的,并且不应在没有充分理由的情况下被覆盖。
source§

impl Copy for Utf8Error

source§

impl Eq for Utf8Error

source§

impl StructuralEq for Utf8Error

source§

impl StructuralPartialEq for Utf8Error

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

获取 selfTypeIdRead more
source§

impl<T> Borrow<T> for Twhere T: ?Sized,

source§

fn borrow(&self) -> &T

从拥有的值中一成不变地借用。 Read more
source§

impl<T> BorrowMut<T> for Twhere T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

从拥有的值中借用。 Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

返回未更改的参数。

source§

impl<T, U> Into<U> for Twhere U: From<T>,

source§

fn into(self) -> U

调用 U::from(self)

也就是说,这种转换是 From<T> for U 实现选择执行的任何操作。

source§

impl<E> Provider for Ewhere E: Error + ?Sized,

source§

fn provide<'a>(&'a self, demand: &mut Demand<'a>)

🔬This is a nightly-only experimental API. (provide_any #96024)
数据提供者应实现此方法以提供他们能够通过使用 demand 提供的所有值。 Read more
source§

impl<T, U> TryFrom<U> for Twhere U: Into<T>,

§

type Error = Infallible

发生转换错误时返回的类型。
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

执行转换。
source§

impl<T, U> TryInto<U> for Twhere U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

发生转换错误时返回的类型。
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

执行转换。