pub struct Utf8Error { /* private fields */ }
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
}
}
}
}
}
RunImplementations§
source§impl Utf8Error
impl Utf8Error
1.5.0 (const: 1.63.0) · sourcepub const fn valid_up_to(&self) -> usize
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());
Run1.20.0 (const: 1.63.0) · sourcepub const fn error_len(&self) -> Option<usize>
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 Error for Utf8Error
impl Error for Utf8Error
impl Copy for Utf8Error
impl Eq for Utf8Error
impl StructuralEq for Utf8Error
impl StructuralPartialEq for Utf8Error
Auto Trait Implementations§
impl RefUnwindSafe for Utf8Error
impl Send for Utf8Error
impl Sync for Utf8Error
impl Unpin for Utf8Error
impl UnwindSafe for Utf8Error
Blanket Implementations§
source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere T: ?Sized,
source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
从拥有的值中借用。 Read more