pub struct Utf8Error { /* private fields */ }Expand description
Errors which can occur when attempting to interpret a sequence of u8
as a string.
As such, the from_utf8 family of functions and methods for both Strings
and &strs make use of this error, for example.
Examples
This error type’s methods can be used to create functionality
similar to String::from_utf8_lossy without allocating heap memory:
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
impl Utf8Error
source
impl Utf8Error
sourcepub fn valid_up_to(&self) -> usize
1.5.0 (const: unstable) · source
pub fn valid_up_to(&self) -> usize
1.5.0 (const: unstable) · sourceReturns the index in the given string up to which valid UTF-8 was verified.
It is the maximum index such that from_utf8(&input[..index])
would return Ok(_).
Examples
Basic usage:
use std::str;
// some invalid bytes, in a vector
let sparkle_heart = vec![0, 159, 146, 150];
// std::str::from_utf8 returns a Utf8Error
let error = str::from_utf8(&sparkle_heart).unwrap_err();
// the second byte is invalid here
assert_eq!(1, error.valid_up_to());Runpub fn error_len(&self) -> Option<usize>
1.20.0 (const: unstable) · source
pub fn error_len(&self) -> Option<usize>
1.20.0 (const: unstable) · sourceProvides more information about the failure:
-
None: the end of the input was reached unexpectedly.self.valid_up_to()is 1 to 3 bytes from the end of the input. If a byte stream (such as a file or a network socket) is being decoded incrementally, this could be a validcharwhose UTF-8 byte sequence is spanning multiple chunks. -
Some(len): an unexpected byte was encountered. The length provided is that of the invalid byte sequence that starts at the index given byvalid_up_to(). Decoding should resume after that sequence (after inserting aU+FFFD REPLACEMENT CHARACTER) in case of lossy decoding.
Trait Implementations
impl Error for Utf8Error
source
impl Error for Utf8Error
sourcefn description(&self) -> &str
source
fn description(&self) -> &str
sourceuse the Display impl or to_string()
fn source(&self) -> Option<&(dyn Error + 'static)>
1.30.0 · source
fn source(&self) -> Option<&(dyn Error + 'static)>
1.30.0 · sourceThe lower-level source of this error, if any. Read more
impl Copy for Utf8Error
sourceimpl Eq for Utf8Error
sourceimpl StructuralEq for Utf8Error
sourceimpl StructuralPartialEq for Utf8Error
sourceAuto Trait Implementations
impl RefUnwindSafe for Utf8Error
impl Send for Utf8Error
impl Sync for Utf8Error
impl Unpin for Utf8Error
impl UnwindSafe for Utf8Error
Blanket Implementations
impl<T> BorrowMut<T> for T where
T: ?Sized,
source
impl<T> BorrowMut<T> for T where
T: ?Sized,
sourcefn borrow_mut(&mut self) -> &mut T
const: unstable · source
fn borrow_mut(&mut self) -> &mut T
const: unstable · sourceMutably borrows from an owned value. Read more
impl<T> ToOwned for T where
T: Clone,
source
impl<T> ToOwned for T where
T: Clone,
sourcetype Owned = T
type Owned = T
The resulting type after obtaining ownership.
fn clone_into(&self, target: &mut T)
source
fn clone_into(&self, target: &mut T)
sourceUses borrowed data to replace owned data, usually by cloning. Read more