Struct alloc::str::Utf8Error 1.0.0[−][src]
pub struct Utf8Error { /* fields omitted */ }
Expand description
尝试将 u8
的序列解释为字符串时可能发生的错误。
这样,例如 String
和 &str
的 from_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
返回给定字符串中的索引,直到对其进行有效 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
提供有关失败的更多信息:
-
None
: 输入的末尾意外到达。self.valid_up_to()
从输入末尾开始是 1 到 3 个字节。 如果字节流 (例如文件或网络套接字) 正在以增量方式进行解码,则这可能是有效的char
,其 UTF-8 字节序列跨越了多个块。 -
Some(len)
: 遇到意外的字节。 提供的长度是从valid_up_to()
给定的索引处开始的无效字节序列的长度。 如果有损解码,则应在该序列之后 (插入U+FFFD REPLACEMENT CHARACTER
之后) 恢复解码。