Struct FromUtf8Error

pub struct FromUtf8Error { pub(in ::string) bytes: Vec<u8>, pub(in ::string) error: Utf8Error }

A possible error value when converting a String from a UTF-8 byte vector.

This type is the error type for the from_utf8 method on String. It is designed in such a way to carefully avoid reallocations: the into_bytes method will give back the byte vector that was used in the conversion attempt.

The Utf8Error type provided by std::str represents an error that may occur when converting a slice of u8s to a &str. In this sense, it's an analogue to FromUtf8Error, and you can get one from a FromUtf8Error through the utf8_error method.

Examples

// some invalid bytes, in a vector
let bytes = vec![0, 159];

let value = String::from_utf8(bytes);

assert!(value.is_err());
assert_eq!(vec![0, 159], value.unwrap_err().into_bytes());

Fields

bytes: Vec<u8>
error: Utf8Error

Implementations

impl FromUtf8Error

fn as_bytes(&self) -> &[u8]

Returns a slice of u8s bytes that were attempted to convert to a String.

Examples

// some invalid bytes, in a vector
let bytes = vec![0, 159];

let value = String::from_utf8(bytes);

assert_eq!(&[0, 159], value.unwrap_err().as_bytes());
fn into_utf8_lossy(self) -> String

Converts the bytes into a String lossily, substituting invalid UTF-8 sequences with replacement characters.

See String::from_utf8_lossy for more details on replacement of invalid sequences, and String::from_utf8_lossy_owned for the String function which corresponds to this function.

This is useful in conjunction with String::from_utf8 when you need to branch on whether the bytes are valid UTF-8, but still want to recover a lossily converted String in the error case. Use String::from_utf8_lossy_owned if you always need a lossily converted String.

Since the original String::from_utf8 error records where validation stopped, this method does not need to re-check the already valid prefix of the byte sequence.

Examples

// some invalid bytes
let input: Vec<u8> = b"Hello \xF0\x90\x80World".into();

let (output, had_invalid_utf8) = match String::from_utf8(input) {
    Ok(output) => (output, false),
    Err(error) => {
        // The bytes were not valid UTF-8, but we can still recover a string.
        (error.into_utf8_lossy(), true)
    }
};

assert_eq!(String::from("Hello �World"), output);
assert!(had_invalid_utf8);
fn into_bytes(self) -> Vec<u8>

Returns the bytes that were attempted to convert to a String.

This method is carefully constructed to avoid allocation. It will consume the error, moving out the bytes, so that a copy of the bytes does not need to be made.

Examples

// some invalid bytes, in a vector
let bytes = vec![0, 159];

let value = String::from_utf8(bytes);

assert_eq!(vec![0, 159], value.unwrap_err().into_bytes());
fn utf8_error(&self) -> Utf8Error

Fetch a Utf8Error to get more details about the conversion failure.

The Utf8Error type provided by std::str represents an error that may occur when converting a slice of u8s to a &str. In this sense, it's an analogue to FromUtf8Error. See its documentation for more details on using it.

Examples

// some invalid bytes, in a vector
let bytes = vec![0, 159];

let error = String::from_utf8(bytes).unwrap_err().utf8_error();

// the first byte is invalid here
assert_eq!(1, error.valid_up_to());

Trait Implementations

impl Clone for FromUtf8Error

fn clone(&self) -> FromUtf8Error

impl Debug for FromUtf8Error

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

impl Display for FromUtf8Error

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

impl Eq for FromUtf8Error

fn assert_fields_are_eq(&self)

impl Error for FromUtf8Error

impl PartialEq for FromUtf8Error

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

impl StructuralPartialEq for FromUtf8Error

Auto Trait Implementations

impl Freeze for FromUtf8Error

impl RefUnwindSafe for FromUtf8Error

impl Send for FromUtf8Error

impl Sync for FromUtf8Error

impl Unpin for FromUtf8Error

impl UnsafeUnpin for FromUtf8Error

impl UnwindSafe for FromUtf8Error

Blanket Implementations

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

fn type_id(&self) -> TypeId

impl<T> Borrow<T> for FromUtf8Error where T: ?Sized,

fn borrow(&self) -> &T

impl<T> BorrowMut<T> for FromUtf8Error where T: ?Sized,

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

impl<T> CloneToUninit for FromUtf8Error where T: Clone,

unsafe fn clone_to_uninit(&self, dest: *mut u8)

impl<T> From<T> for FromUtf8Error

fn from(t: T) -> T

Returns the argument unchanged.

impl<T> SizeHint for FromUtf8Error where T: ?Sized,

fn lower_bound(&self) -> usize
fn upper_bound(&self) -> Option<usize>

impl<T> SizedTypeProperties for FromUtf8Error

impl<T> ToOwned for FromUtf8Error where T: Clone,

type Owned = T;
fn to_owned(&self) -> T
fn clone_into(&self, target: &mut T)

impl<T> ToString for FromUtf8Error where T: Display + ?Sized,

fn to_string(&self) -> String

impl<T, U> Into<U> for FromUtf8Error where U: From<T>,

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of [From]<T> for U chooses to do.

impl<T, U> TryFrom<U> for FromUtf8Error where U: Into<T>,

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

impl<T, U> TryInto<U> for FromUtf8Error where U: TryFrom<T>,

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