Struct core::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
}
}
}
}
}
RunImplementations
返回给定字符串中的索引,直到对其进行有效 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
之后) 恢复解码。