NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
crates.io · #551 most downloaded on crates.io
UTF-8 and UTF-16 character types, iterators and related methods for char, u8 and u16.
Last release 4 years ago
no release in 18 months
Release timing varies
gaps range from 2 months to 3.0 years
Most releases are documented
notes for 9 of 13 stable releases
Nothing withdrawn
no release was ever pulled
11 years old
13 releases · first in 2016
Almost three years after v0.3.6!
Almost three years after v0.3.6!
InvalidUtf8Array, InvalidUtf8Slice, InvalidUtf8FirstByte and InvalidUtf8 with Utf8Error plus Utf8ErrorKind.Utf8ErrorKind::NonUtf8Byte is returned for sequences that would previously have been reported as too high codepoint or overlong encoding.InvalidCodepoint -> CodepointErrorInvalidUtf16FirstUnit -> Utf16FirstUnitErrorInvalidUtf16Array -> Utf16ArrayErrorInvalidUtf16Slice -> Utf16SliceError1InvalidUtf16Tuple -> Utf16TupleErrorCodepointError::error_range() to RangeInclusive.Utf16SliceError::FirstLowSurrogate -> FirstIsTrailingSurrogateUtf16SliceError::SecondNotLowSurrogate -> SecondIsNotTrailingSurrogateUtf16TupleError::InvalidSecond -> SecondIsNotTrailingSurrogateUtf16Char::from_bmp() and rename it to NonBmpError.Utf8CharIterator and Utf16CharIterator from the crate root.iterator module.)AsciiExt trait,
and make the methods available in #![no_std]-mode.AsciiExt methods take self by value.iter_bytes() and iter_units().Utf8Char::from_slice_start_unchecked() when passed an empty slice.const fn.const fns Utf8Char::new() and Utf16Char::new().One column per quarter.
Fix pointless undefined behavior in Utf16Char.to_ascii_char() (which is part of ascii feature)
Utf16Char.to_ascii_char() (which is part of ascii feature)[u16; 2] UTF-16 array alternatives to (u16, Some(u16)) UTF-16 tuple methods.Utf16Char.is_bmp().* Fix docs.rs build failure
See RELEASES.md for changes.
See RELEASES.md for changes.
Utf8CharMerger and Utf16CharMerger
and slice-based iterators Utf8CharDecoder and Utf16CharDecoderStrings from Utf16Char-producing iteratorsSee RELEASES.md for changes.
See RELEASES.md for changes.
from_array() and from_slice() accepted two-byte encodings of ASCII characters >= '@', which includes all letters)FromStr for Utf16Charfrom_str_start() to Utf8Char and Utf16CharUtf{8,16}Char{s,Indices}: str-based iterators for Utf8Char and Utf16Char equivalent to char's Chars and CharIndices.StrExt with functions to create the above iterators.FromIterator and Extend for Vec<{u8,u16}> with reference-producing Utf{8,16}Char iterators too.Utf8CharSplitter and Utf16CharSplitter: Utf{8,16}Char-to-u{8,16} iterator adapters.IterExt, iter_bytes() and iter_units() to create the above splitting iterators.Utf8Char::from_ascii(), Utf16Char::from_bmp() with _unchecked versions of both.PartialEq and PartialOrd implementations.description() for a few error types.See RELEASES.md for changes.
See RELEASES.md for changes.
AsciiExt deprecation warning and add replacement methods.U8UtfExt::extra_utf8_bytes().See RELEASES.md for changes.
See RELEASES.md for changes.
See RELEASES.md for changes.
See RELEASES.md for changes.
CharExt::write_utf{8,16}() because encode_utf{8,16}() has been stabilized.U16UtfExt::utf16_needs_extra_unit() instead of None.U16UtfExt::utf_is_leading_surrogate() to is_utf16_leading_surrogate().Utf16Char::from_slice() to from_slice_start() and CharExt::from_utf{8,16}_slice()
to from_utf{8,16}_slice_start() to be consistent with Utf8Char.CharExt::from_slice() would accept some trailing surrogates
as standalone codepoints.See RELEASES.md for changes.
See RELEASES.md for changes.
CharExt::write_utf{8,16}() to panic instead of returning None
if the slice is too short.CharExt::write_utf8() and Utf8Char::to_slice() could change bytes it shouldn't.#[no_std]; see 70e090ee for differences.AsciiExt. (doesn't require ascii or nightly)Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Your coding agent can read these notes before it upgrades. Set up the MCP server →