Struct widestring::ucstring::U16CString [−][src]
pub struct U16CString { /* fields omitted */ }
Expand description
An owned, mutable C-style 16-bit wide string for FFI that is nul-aware and nul-terminated.
The string slice of a U16CString
is U16CStr
.
U16CString
strings do not have a defined encoding. While it is sometimes
assumed that they contain possibly invalid or ill-formed UTF-16 data, they may be used for
any wide encoded string.
Nul termination
U16CString
is aware of nul (0
) values. Unless unchecked conversions are used, all
U16CString
strings end with a nul-terminator in the underlying buffer and contain no
internal nul values. These strings are intended to be used with FFI functions that require
nul-terminated strings.
Because of the nul termination requirement, multiple classes methods for provided for
construction a U16CString
under various scenarios. By default, methods such as
from_ptr
and from_vec
return an error if it contains
any interior nul values before the terminator. For these methods, the input does not need to
contain the terminating nul; it is added if it is does not exist.
_truncate
methods on the other hand, such as
from_ptr_truncate
and
from_vec_truncate
, construct a string that terminates with
the first nul value encountered in the string, and do not return an error. They
automatically ensure the string is terminated in a nul value even if it was not originally.
Finally, unsafe _unchecked
variants of these methods, such as
from_ptr_unchecked
and
from_vec_unchecked
allow bypassing any checks for nul
values, when the input has already been ensured to no interior nul values. Again, any
missing nul terminator is automatically added if necessary.
Examples
The easiest way to use U16CString
outside of FFI is with the
u16cstr!
macro to convert string literals into nul-terminated UTF-16
strings at compile time:
use widestring::{u16cstr, U16CString};
let hello = U16CString::from(u16cstr!("Hello, world!"));
You can also convert any u16
slice or vector directly:
use widestring::{u16cstr, U16CString};
let sparkle_heart = vec![0xd83d, 0xdc96];
let sparkle_heart = U16CString::from_vec(sparkle_heart).unwrap();
// The string will add the missing nul terminator
assert_eq!(u16cstr!("💖"), sparkle_heart);
// This unpaired UTf-16 surrogate is invalid UTF-16, but is perfectly valid in U16CString
let malformed_utf16 = vec![0xd83d, 0x0];
let s = U16CString::from_vec(malformed_utf16).unwrap();
assert_eq!(s.len(), 1); // Note the terminating nul is not counted in the length
When working with a FFI, it is useful to create a U16CString
from a pointer:
use widestring::{u16cstr, U16CString};
let sparkle_heart = [0xd83d, 0xdc96, 0x0];
let s = unsafe {
// Note the string and pointer length does not include the nul terminator
U16CString::from_ptr(sparkle_heart.as_ptr(), sparkle_heart.len() - 1).unwrap()
};
assert_eq!(u16cstr!("💖"), s);
// Alternatively, if the length of the pointer is unknown but definitely terminates in nul,
// a C-style string version can be used
let s = unsafe { U16CString::from_ptr_str(sparkle_heart.as_ptr()) };
assert_eq!(u16cstr!("💖"), s);
Implementations
The nul terminator character value.
Constructs a wide C string from a container of wide character data.
This method will consume the provided data and use the underlying elements to construct a new string. The data will be scanned for invalid interior nul values.
Errors
This function will return an error if the data contains a nul value that is not the
terminating nul.
The returned error will contain the original Vec
as well as the position of the
nul value.
Examples
use widestring::U16CString;
let v = vec![84u16, 104u16, 101u16]; // 'T' 'h' 'e'
// Create a wide string from the vector
let wcstr = U16CString::from_vec(v).unwrap();
Empty vectors are valid and will return an empty string with a nul terminator:
use widestring::U16CString;
let wcstr = U16CString::from_vec(vec![]).unwrap();
assert_eq!(wcstr, U16CString::default());
The following example demonstrates errors from nul values in a vector.
use widestring::U16CString;
let v = vec![84u16, 0u16, 104u16, 101u16]; // 'T' NUL 'h' 'e'
// Create a wide string from the vector
let res = U16CString::from_vec(v);
assert!(res.is_err());
assert_eq!(res.err().unwrap().nul_position(), 1);
Constructs a wide C string from a container of wide character data, truncating at the first nul terminator.
The string will be truncated at the first nul value in the data.
Examples
use widestring::U16CString;
let v = vec![84u16, 104u16, 101u16, 0u16]; // 'T' 'h' 'e' NUL
// Create a wide string from the vector
let wcstr = U16CString::from_vec_truncate(v);
Constructs a wide C string from a vector without checking for interior nul values.
A terminating nul value will be appended if the vector does not already have a terminating nul.
Safety
This method is equivalent to from_vec
except that no runtime
assertion is made that v
contains no interior nul values. Providing a vector with
any nul values that are not the last value in the vector will result in an invalid
C string.
Constructs a wide C string from anything that can be converted to a wide string slice.
The string will be scanned for invalid interior nul values.
Errors
This function will return an error if the data contains a nul value that is not the
terminating nul.
The returned error will contain a Vec
as well as the position of the nul value.
Constructs a wide C string from anything that can be converted to a wide string slice, truncating at the first nul terminator.
The string will be truncated at the first nul value in the string.
Constructs a wide C string from anything that can be converted to a wide string slice, without scanning for invalid nul values.
Safety
This method is equivalent to from_ustr
except that no runtime
assertion is made that v
contains no interior nul values. Providing a string with
any nul values that are not the last value in the vector will result in an invalid
C string.
Constructs a new wide C string copied from a nul-terminated string pointer.
This will scan for nul values beginning with p
. The first nul value will be used
as the nul terminator for the string, similar to how libc string functions such as
strlen
work.
If you wish to avoid copying the string pointer, use U16CStr::from_ptr_str
or
U32CStr::from_ptr_str
instead.
Safety
This function is unsafe as there is no guarantee that the given pointer is valid or has a nul terminator, and the function could scan past the underlying buffer.
In addition, the data must meet the safety conditions of std::slice::from_raw_parts.
Panics
This function panics if p
is null.
Caveat
The lifetime for the returned string is inferred from its usage. To prevent accidental misuse, it’s suggested to tie the lifetime to whichever source lifetime is safe in the context, such as by providing a helper function taking the lifetime of a host value for the string, or by explicit annotation.
Constructs a wide C string copied from a pointer and a length, checking for invalid interior nul values.
The len
argument is the number of elements, not the number of bytes, and does
not include the nul terminator of the string. If len
is 0
, p
is allowed to
be a null pointer.
The resulting string will always be nul-terminated even if the pointer data is not.
Errors
This will scan the pointer string for an interior nul value and error if one is
found. To avoid scanning for interior nuls,
from_ptr_unchecked
may be used instead.
The returned error will contain a Vec
as well as the position of the nul value.
Safety
This function is unsafe as there is no guarantee that the given pointer is valid for
len
elements.
In addition, the data must meet the safety conditions of std::slice::from_raw_parts.
Panics
Panics if len
is greater than 0 but p
is a null pointer.
Constructs a wide C string copied from a pointer and a length, truncating at the first nul terminator.
The len
argument is the number of elements, not the number of bytes. This will
scan for nul values beginning with p
until offset len
. The first nul value will
be used as the nul terminator for the string, ignoring any remaining values left
before len
. If no nul value is found, the whole string of length len
is used,
and a new nul-terminator will be added to the resulting string. If len
is 0
, p
is allowed to be a null pointer.
Safety
This function is unsafe as there is no guarantee that the given pointer is valid for
len
elements.
In addition, the data must meet the safety conditions of std::slice::from_raw_parts.
Panics
Panics if len
is greater than 0 but p
is a null pointer.
Constructs a wide C string copied from a pointer and a length without checking for any nul values.
The len
argument is the number of elements, not the number of bytes, and does
not include the nul terminator of the string. If len
is 0
, p
is allowed to
be a null pointer.
The resulting string will always be nul-terminated even if the pointer data is not.
Safety
This function is unsafe as there is no guarantee that the given pointer is valid for
len
elements.
In addition, the data must meet the safety conditions of std::slice::from_raw_parts.
The interior values of the pointer are not scanned for nul. Any interior nul values or will result in an invalid C string.
Panics
Panics if len
is greater than 0 but p
is a null pointer.
Converts to a mutable wide C string slice.
Converts this string into a wide string without a nul terminator.
The resulting string will not contain a nul-terminator, and will contain no other nul values.
Converts this string into a wide string with a nul terminator.
The resulting vector will contain a nul-terminator and no interior nul values.
Converts the string into a Vec
without a nul terminator, consuming the string in
the process.
The resulting vector will not contain a nul-terminator, and will contain no other nul values.
Converts the string into a Vec
, consuming the string in the process.
The resulting vector will contain a nul-terminator and no interior nul values.
Retakes ownership of a wide C string that was transferred to C.
This should only be used in combination with into_raw
. To
construct a new wide C string from a pointer, use
from_ptr_str
.
Safety
This should only ever be called with a pointer that was earlier obtained by calling
into_raw
. Additionally, the length of the string will be
recalculated from the pointer by scanning for the nul-terminator.
Panics
Panics if p
is a null pointer.
Converts this wide C string into a boxed wide C string slice.
Examples
use widestring::{U16CString, U16CStr};
let mut v = vec![102u16, 111u16, 111u16]; // "foo"
let c_string = U16CString::from_vec(v.clone()).unwrap();
let boxed = c_string.into_boxed_ucstr();
v.push(0);
assert_eq!(&*boxed, U16CStr::from_slice(&v).unwrap());
Constructs a U16CString
copy from a str
, encoding it as UTF-16.
This makes a string copy of the str
. Since str
will always be valid UTF-8, the
resulting U16CString
will also be valid UTF-16.
The string will be scanned for nul values, which are invalid anywhere except the final character.
The resulting string will always be nul-terminated even if the original string is not.
Errors
This function will return an error if the data contains a nul value anywhere except the
final position.
The returned error will contain a Vec<u16>
as well as the position of the nul value.
Examples
use widestring::U16CString;
let s = "MyString";
// Create a wide string from the string
let wcstr = U16CString::from_str(s).unwrap();
The following example demonstrates errors from nul values in a string.
use widestring::U16CString;
let s = "My\u{0}String";
// Create a wide string from the string
let res = U16CString::from_str(s);
assert!(res.is_err());
assert_eq!(res.err().unwrap().nul_position(), 2);
Constructs a U16CString
copy from a str
, encoding it as UTF-16, without checking for
interior nul values.
This makes a string copy of the str
. Since str
will always be valid UTF-8, the
resulting U16CString
will also be valid UTF-16.
The resulting string will always be nul-terminated even if the original string is not.
Safety
This method is equivalent to from_str
except that no runtime assertion
is made that s
contains no interior nul values. Providing a string with nul values that
are not the last character will result in an invalid U16CString
.
Examples
use widestring::U16CString;
let s = "MyString";
// Create a wide string from the string
let wcstr = unsafe { U16CString::from_str_unchecked(s) };
Constructs a U16CString
copy from a str
, encoding it as UTF-16, truncating at the
first nul terminator.
This makes a string copy of the str
. Since str
will always be valid UTF-8, the
resulting U16CString
will also be valid UTF-16.
The string will be truncated at the first nul value in the string. The resulting string will always be nul-terminated even if the original string is not.
Examples
use widestring::U16CString;
let s = "My\u{0}String";
// Create a wide string from the string
let wcstr = U16CString::from_str_truncate(s);
assert_eq!(wcstr.to_string_lossy(), "My");
Constructs a U16CString
copy from an OsStr
.
This makes a string copy of the OsStr
. Since OsStr
makes no guarantees that it is valid data, there is no guarantee that the resulting
U16CString
will be valid UTF-16.
The string will be scanned for nul values, which are invalid anywhere except the final character. The resulting string will always be nul-terminated even if the original string is not.
Note that the encoding of OsStr
is platform-dependent, so on
some platforms this may make an encoding conversions, while on other platforms (such as
windows) no changes to the string will be made.
Errors
This function will return an error if the data contains a nul value anywhere except the
last character.
The returned error will contain a Vec<u16>
as well as the position of the nul value.
Examples
use widestring::U16CString;
let s = "MyString";
// Create a wide string from the string
let wcstr = U16CString::from_os_str(s).unwrap();
The following example demonstrates errors from nul values in the string.
use widestring::U16CString;
let s = "My\u{0}String";
// Create a wide string from the string
let res = U16CString::from_os_str(s);
assert!(res.is_err());
assert_eq!(res.err().unwrap().nul_position(), 2);
Constructs a U16CString
copy from an OsStr
, without checking for nul
values.
This makes a string copy of the OsStr
. Since OsStr
makes no guarantees that it is valid data, there is no guarantee that the resulting
U16CString
will be valid UTF-16.
The resulting string will always be nul-terminated even if the original string is not.
Note that the encoding of OsStr
is platform-dependent, so on
some platforms this may make an encoding conversions, while on other platforms (such as
windows) no changes to the string will be made.
Safety
This method is equivalent to from_os_str
except that no runtime
assertion is made that s
contains no interior nul values. Providing a string with nul
values anywhere but the last character will result in an invalid U16CString
.
Examples
use widestring::U16CString;
let s = "MyString";
// Create a wide string from the string
let wcstr = unsafe { U16CString::from_os_str_unchecked(s) };
Constructs a U16CString
copy from an OsStr
, truncating at the first
nul terminator.
This makes a string copy of the OsStr
. Since OsStr
makes no guarantees that it is valid data, there is no guarantee that the resulting
U16CString
will be valid UTF-16.
The string will be truncated at the first nul value in the string. The resulting string will always be nul-terminated even if the original string is not.
Note that the encoding of OsStr
is platform-dependent, so on
some platforms this may make an encoding conversions, while on other platforms (such as
windows) no changes to the string will be made.
Examples
use widestring::U16CString;
let s = "My\u{0}String";
// Create a wide string from the string
let wcstr = U16CString::from_os_str_truncate(s);
assert_eq!(wcstr.to_string_lossy(), "My");
Methods from Deref<Target = U16CStr>
Copies the string reference to a new owned wide C string.
Copies the string reference to a new owned wide string.
The resulting wide string will not have a nul terminator.
Examples
use widestring::U16CString;
let wcstr = U16CString::from_str("MyString").unwrap();
// Convert U16CString to a U16String
let wstr = wcstr.to_ustring();
// U16CString will have a terminating nul
let wcvec = wcstr.into_vec_with_nul();
assert_eq!(wcvec[wcvec.len()-1], 0);
// The resulting U16String will not have the terminating nul
let wvec = wstr.into_vec();
assert_ne!(wvec[wvec.len()-1], 0);
Converts to a slice of the underlying elements.
The slice will not include the nul terminator.
Converts to a mutable slice of the underlying elements.
The slice will not include the nul terminator.
Safety
This method is unsafe because you can violate the invariants of this type when mutating the slice (i.e. by adding interior nul values).
Converts to a slice of the underlying elements, including the nul terminator.
Returns a raw pointer to the string.
The caller must ensure that the string outlives the pointer this function returns, or else it will end up pointing to garbage.
The caller must also ensure that the memory the pointer (non-transitively) points to
is never written to (except inside an UnsafeCell
) using this pointer or any
pointer derived from it. If you need to mutate the contents of the string, use
as_mut_ptr
.
Modifying the container referenced by this string may cause its buffer to be reallocated, which would also make any pointers to it invalid.
Returns a mutable raw pointer to the string.
The caller must ensure that the string outlives the pointer this function returns, or else it will end up pointing to garbage.
Modifying the container referenced by this string may cause its buffer to be reallocated, which would also make any pointers to it invalid.
Safety
This method is unsafe because you can violate the invariants of this type when mutating the memory the pointer points to (i.e. by adding interior nul values).
Returns the two raw pointers spanning the string slice.
The returned range is half-open, which means that the end pointer points one past the last element of the slice. This way, an empty slice is represented by two equal pointers, and the difference between the two pointers represents the size of the slice.
See as_ptr
for warnings on using these pointers. The end pointer
requires extra caution, as it does not point to a valid element in the slice.
This function is useful for interacting with foreign interfaces which use two pointers to refer to a range of elements in memory, as is common in C++.
Returns the two unsafe mutable pointers spanning the string slice.
The returned range is half-open, which means that the end pointer points one past the last element of the slice. This way, an empty slice is represented by two equal pointers, and the difference between the two pointers represents the size of the slice.
See as_mut_ptr
for warnings on using these pointers. The end
pointer requires extra caution, as it does not point to a valid element in the
slice.
This function is useful for interacting with foreign interfaces which use two pointers to refer to a range of elements in memory, as is common in C++.
Safety
This method is unsafe because you can violate the invariants of this type when mutating the memory the pointer points to (i.e. by adding interior nul values).
Returns the length of the string as number of elements (not number of bytes) not including nul terminator.
Returns whether this string contains no data (i.e. is only the nul terminator).
Returns a wide string slice to this wide C string slice.
The wide string slice will not include the nul-terminator.
Returns a wide string slice to this wide C string slice.
The wide string slice will include the nul-terminator.
Returns a mutable wide string slice to this wide C string slice.
The wide string slice will not include the nul-terminator.
Safety
This method is unsafe because you can violate the invariants of this type when mutating the string (i.e. by adding interior nul values).
Returns an object that implements Display
for printing
strings that may contain non-Unicode data.
A wide C string might data of any encoding. This function assumes the string is encoded in
UTF-16, and returns a struct implements the
Display
trait in a way that decoding the string is lossy but
no heap allocations are performed, such as by
to_string_lossy
.
By default, invalid Unicode data is replaced with
U+FFFD REPLACEMENT CHARACTER
(�). If you wish
to simply skip any invalid Uncode data and forego the replacement, you may use the
alternate formatting with {:#}
.
Examples
Basic usage:
use widestring::U16CStr;
// 𝄞mus<invalid>ic<invalid>
let s = U16CStr::from_slice(&[
0xD834, 0xDD1E, 0x006d, 0x0075, 0x0073, 0xDD1E, 0x0069, 0x0063, 0xD834, 0x0000,
]).unwrap();
assert_eq!(format!("{}", s.display()),
"𝄞mus�ic�"
);
Using alternate formatting style to skip invalid values entirely:
use widestring::U16CStr;
// 𝄞mus<invalid>ic<invalid>
let s = U16CStr::from_slice(&[
0xD834, 0xDD1E, 0x006d, 0x0075, 0x0073, 0xDD1E, 0x0069, 0x0063, 0xD834, 0x0000,
]).unwrap();
assert_eq!(format!("{:#}", s.display()),
"𝄞music"
);
Returns a subslice of the string.
This is the non-panicking alternative to indexing the string. Returns None
whenever equivalent indexing operation would panic.
Returns a mutable subslice of the string.
This is the non-panicking alternative to indexing the string. Returns None
whenever equivalent indexing operation would panic.
Safety
This method is unsafe because you can violate the invariants of this type when mutating the memory the pointer points to (i.e. by adding interior nul values).
pub unsafe fn get_unchecked<I>(&self, i: I) -> &U16Str where
I: SliceIndex<[u16], Output = [u16]>,
pub unsafe fn get_unchecked<I>(&self, i: I) -> &U16Str where
I: SliceIndex<[u16], Output = [u16]>,
Returns an unchecked subslice of the string.
This is the unchecked alternative to indexing the string.
Safety
Callers of this function are responsible that these preconditions are satisfied:
- The starting index must not exceed the ending index;
- Indexes must be within bounds of the original slice.
Failing that, the returned string slice may reference invalid memory.
pub unsafe fn get_unchecked_mut<I>(&mut self, i: I) -> &mut U16Str where
I: SliceIndex<[u16], Output = [u16]>,
pub unsafe fn get_unchecked_mut<I>(&mut self, i: I) -> &mut U16Str where
I: SliceIndex<[u16], Output = [u16]>,
Returns aa mutable, unchecked subslice of the string.
This is the unchecked alternative to indexing the string.
Safety
Callers of this function are responsible that these preconditions are satisfied:
- The starting index must not exceed the ending index;
- Indexes must be within bounds of the original slice.
Failing that, the returned string slice may reference invalid memory.
This method is unsafe because you can violate the invariants of this type when mutating the memory the pointer points to (i.e. by adding interior nul values).
Divide one string slice into two at an index.
The argument, mid
, should be an offset from the start of the string.
The two slices returned go from the start of the string slice to mid
, and from
mid
to the end of the string slice.
To get mutable string slices instead, see the split_at_mut
method.
Divide one mutable string slice into two at an index.
The argument, mid
, should be an offset from the start of the string.
The two slices returned go from the start of the string slice to mid
, and from
mid
to the end of the string slice.
To get immutable string slices instead, see the split_at
method.
Safety
This method is unsafe because you can violate the invariants of this type when mutating the memory the pointer points to (i.e. by adding interior nul values).
Creates a new owned string by repeating this string n
times.
Panics
This function will panic if the capacity would overflow.
Copys a string to an owned OsString
.
This makes a string copy of the U16CStr
. Since U16CStr
makes no guarantees that it
is valid UTF-16, there is no guarantee that the resulting OsString
will be valid data. The OsString
will not have a nul
terminator.
Note that the encoding of OsString
is platform-dependent, so on
some platforms this may make an encoding conversions, while on other platforms (such as
windows) no changes to the string will be made.
Examples
use widestring::U16CString;
use std::ffi::OsString;
let s = "MyString";
// Create a wide string from the string
let wstr = U16CString::from_str(s).unwrap();
// Create an OsString from the wide string
let osstr = wstr.to_os_string();
assert_eq!(osstr, OsString::from(s));
Copies the string to a String
if it contains valid UTF-16 data.
This method assumes this string is encoded as UTF-16 and attempts to decode it as such. It will *not have a nul terminator.
Errors
Returns an error if the string contains any invalid UTF-16 data.
Examples
use widestring::U16CString;
let s = "MyString";
// Create a wide string from the string
let wstr = U16CString::from_str(s).unwrap();
// Create a regular string from the wide string
let s2 = wstr.to_string().unwrap();
assert_eq!(s2, s);
Decodes the string reference to a String
even if it is invalid UTF-16 data.
This method assumes this string is encoded as UTF-16 and attempts to decode it as such. Any
invalid sequences are replaced with
U+FFFD REPLACEMENT CHARACTER
, which looks like this:
�. It will *not have a nul terminator.
Examples
use widestring::U16CString;
let s = "MyString";
// Create a wide string from the string
let wstr = U16CString::from_str(s).unwrap();
// Create a regular string from the wide string
let s2 = wstr.to_string_lossy();
assert_eq!(s2, s);
pub fn chars(&self) -> CharsUtf16<'_>ⓘNotable traits for CharsUtf16<'a>impl<'a> Iterator for CharsUtf16<'a> type Item = Result<char, DecodeUtf16Error>;
pub fn chars(&self) -> CharsUtf16<'_>ⓘNotable traits for CharsUtf16<'a>impl<'a> Iterator for CharsUtf16<'a> type Item = Result<char, DecodeUtf16Error>;
impl<'a> Iterator for CharsUtf16<'a> type Item = Result<char, DecodeUtf16Error>;
Returns an iterator over the char
s of a string slice.
As this string has no defined encoding, this method assumes the string is UTF-16. Since it
may consist of invalid UTF-16, the iterator returned by this method
is an iterator over Result<char, DecodeUtf16Error>
instead of char
s
directly. If you would like a lossy iterator over chars
s directly, instead
use chars_lossy
.
It’s important to remember that char
represents a Unicode Scalar Value, and
may not match your idea of what a ‘character’ is. Iteration over grapheme clusters may be
what you actually want. That functionality is not provided by by this crate.
pub fn chars_lossy(&self) -> CharsLossyUtf16<'_>ⓘNotable traits for CharsLossyUtf16<'a>impl<'a> Iterator for CharsLossyUtf16<'a> type Item = char;
pub fn chars_lossy(&self) -> CharsLossyUtf16<'_>ⓘNotable traits for CharsLossyUtf16<'a>impl<'a> Iterator for CharsLossyUtf16<'a> type Item = char;
impl<'a> Iterator for CharsLossyUtf16<'a> type Item = char;
Returns a lossy iterator over the char
s of a string slice.
As this string has no defined encoding, this method assumes the string is UTF-16. Since it
may consist of invalid UTF-16, the iterator returned by this method will replace unpaired
surrogates with
U+FFFD REPLACEMENT CHARACTER
(�). This is a lossy
version of chars
.
It’s important to remember that char
represents a Unicode Scalar Value, and
may not match your idea of what a ‘character’ is. Iteration over grapheme clusters may be
what you actually want. That functionality is not provided by by this crate.
pub fn char_indices(&self) -> CharIndicesUtf16<'_>ⓘNotable traits for CharIndicesUtf16<'a>impl<'a> Iterator for CharIndicesUtf16<'a> type Item = (usize, Result<char, DecodeUtf16Error>);
pub fn char_indices(&self) -> CharIndicesUtf16<'_>ⓘNotable traits for CharIndicesUtf16<'a>impl<'a> Iterator for CharIndicesUtf16<'a> type Item = (usize, Result<char, DecodeUtf16Error>);
impl<'a> Iterator for CharIndicesUtf16<'a> type Item = (usize, Result<char, DecodeUtf16Error>);
Returns an iterator over the chars of a string slice, and their positions.
As this string has no defined encoding, this method assumes the string is UTF-16. Since it
may consist of invalid UTF-16, the iterator returned by this method is an iterator over
is an iterator over Result<char, DecodeUtf16Error>
as well as their positions, instead of
char
s directly. If you would like a lossy indices iterator over
chars
s directly, instead use
char_indices_lossy
.
The iterator yields tuples. The position is first, the char
is second.
pub fn char_indices_lossy(&self) -> CharIndicesLossyUtf16<'_>ⓘNotable traits for CharIndicesLossyUtf16<'a>impl<'a> Iterator for CharIndicesLossyUtf16<'a> type Item = (usize, char);
pub fn char_indices_lossy(&self) -> CharIndicesLossyUtf16<'_>ⓘNotable traits for CharIndicesLossyUtf16<'a>impl<'a> Iterator for CharIndicesLossyUtf16<'a> type Item = (usize, char);
impl<'a> Iterator for CharIndicesLossyUtf16<'a> type Item = (usize, char);
Returns a lossy iterator over the chars of a string slice, and their positions.
As this string slice may consist of invalid UTF-16, the iterator returned by this method
will replace unpaired surrogates with
U+FFFD REPLACEMENT CHARACTER
(�), as well as the
positions of all characters. This is a lossy version of
char_indices
.
The iterator yields tuples. The position is first, the char
is second.
Trait Implementations
Mutably borrows from an owned value. Read more
Extends a collection with the contents of an iterator. Read more
extend_one
)Extends a collection with exactly one element.
extend_one
)Reserves capacity in a collection for the given number of additional elements. Read more
Performs the conversion.
Performs the conversion.
Performs the conversion.
Performs the conversion.
Performs the conversion.
Creates a value from an iterator. Read more
This method tests for self
and other
values to be equal, and is used
by ==
. Read more
This method tests for !=
.
This method returns an ordering between self
and other
values if one exists. Read more
This method tests less than (for self
and other
) and is used by the <
operator. Read more
This method tests less than or equal to (for self
and other
) and is used by the <=
operator. Read more
This method tests greater than (for self
and other
) and is used by the >
operator. Read more
This method returns an ordering between self
and other
values if one exists. Read more
This method tests less than (for self
and other
) and is used by the <
operator. Read more
This method tests less than or equal to (for self
and other
) and is used by the <=
operator. Read more
This method tests greater than (for self
and other
) and is used by the >
operator. Read more
This method returns an ordering between self
and other
values if one exists. Read more
This method tests less than (for self
and other
) and is used by the <
operator. Read more
This method tests less than or equal to (for self
and other
) and is used by the <=
operator. Read more
This method tests greater than (for self
and other
) and is used by the >
operator. Read more
This method returns an ordering between self
and other
values if one exists. Read more
This method tests less than (for self
and other
) and is used by the <
operator. Read more
This method tests less than or equal to (for self
and other
) and is used by the <=
operator. Read more
This method tests greater than (for self
and other
) and is used by the >
operator. Read more
This method returns an ordering between self
and other
values if one exists. Read more
This method tests less than (for self
and other
) and is used by the <
operator. Read more
This method tests less than or equal to (for self
and other
) and is used by the <=
operator. Read more
This method tests greater than (for self
and other
) and is used by the >
operator. Read more
This method returns an ordering between self
and other
values if one exists. Read more
This method tests less than (for self
and other
) and is used by the <
operator. Read more
This method tests less than or equal to (for self
and other
) and is used by the <=
operator. Read more
This method tests greater than (for self
and other
) and is used by the >
operator. Read more
This method returns an ordering between self
and other
values if one exists. Read more
This method tests less than (for self
and other
) and is used by the <
operator. Read more
This method tests less than or equal to (for self
and other
) and is used by the <=
operator. Read more
This method tests greater than (for self
and other
) and is used by the >
operator. Read more
This method returns an ordering between self
and other
values if one exists. Read more
This method tests less than (for self
and other
) and is used by the <
operator. Read more
This method tests less than or equal to (for self
and other
) and is used by the <=
operator. Read more
This method tests greater than (for self
and other
) and is used by the >
operator. Read more
This method returns an ordering between self
and other
values if one exists. Read more
This method tests less than (for self
and other
) and is used by the <
operator. Read more
This method tests less than or equal to (for self
and other
) and is used by the <=
operator. Read more
This method tests greater than (for self
and other
) and is used by the >
operator. Read more
type Error = Utf16Error
type Error = Utf16Error
The type returned in the event of a conversion error.
Performs the conversion.
Auto Trait Implementations
impl RefUnwindSafe for U16CString
impl Send for U16CString
impl Sync for U16CString
impl Unpin for U16CString
impl UnwindSafe for U16CString
Blanket Implementations
Mutably borrows from an owned value. Read more