#unicode #utf-8 #utf-16

no-std encode_unicode

UTF-8 and UTF-16 character types, iterators and related methods for char, u8 and u16

13 releases (1 stable)

1.0.0 Aug 7, 2022
0.3.6 Aug 23, 2019
0.3.5 Oct 23, 2018
0.3.2 Aug 8, 2018
0.1.3 Apr 7, 2016

#39 in Encoding

Download history 162489/week @ 2023-02-12 169924/week @ 2023-02-19 175556/week @ 2023-02-26 206497/week @ 2023-03-05 185416/week @ 2023-03-12 200367/week @ 2023-03-19 191166/week @ 2023-03-26 156850/week @ 2023-04-02 172154/week @ 2023-04-09 184395/week @ 2023-04-16 172990/week @ 2023-04-23 158685/week @ 2023-04-30 172860/week @ 2023-05-07 185250/week @ 2023-05-14 188053/week @ 2023-05-21 165311/week @ 2023-05-28

722,992 downloads per month
Used in 3,107 crates (17 directly)

Apache-2.0 OR MIT



UTF-8 and UTF-16 character types, iterators and related methods for char, u8 and u16.

crates.io page License: Apache-2 or MIT Documentation on docs.rs CI build status


Minimum supported Rust version

The minimum supported Rust version for 1.0.* releases is 1.56.
Later 1.y.0 releases might require newer Rust versions, but the three most recent stable releases at the time of publishing will always be supported. For example this means that if the current stable Rust version is 1.66 when encode_unicode 1.1.0 is released, then encode_unicode 1.1.* will not require a newer Rust version than 1.63.

Optional features

  • #![no_std]-mode: There are a few differences:
    • Error doesn't exist, but description() is made available as an inherent impl.
    • Extend/FromIterator-implementations for String/Vec<u8>/Vec<u16> are missing.
    • There is no io, so Utf8Iterator and Utf8CharSplitter doesn't implement Read. This feature is enabled by setting default-features=false in Cargo.toml: encode_unicode = {version="0.3.4", default-features=false}.
  • Integration with the ascii crate: Convert Utf8Char and Utf16Char to and from ascii::AsciiChar.


Licensed under either of

at your option.


Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.


do.sh can be used to check all feature combinations, test everything, show output from benchmarks in case setup fails, run fuzz tests for a while and lint everything (except fuzz tests).
It assumes rustup is installed and that cargo +release works.
(It is named the way it is to autocomplete fully from the first character after ./.)


The original purpose of this crate was to provide standins for the then unstable encode_utf8() and encode_utf16() methods on char.
The standins were removed in version 0.3 when Rust 1.15 stabilized the encode_ methods, but the other stuff I added, such as iterators like those encode_utf{8,16}() returned for a while, might still be of use.