Bug: 195932560

Clone this repo:
  1. 22b87a8 Merge "Update TEST_MAPPING" am: cad1f726a8 am: bb6fa3c792 by Treehugger Robot · 9 weeks ago master
  2. bb6fa3c Merge "Update TEST_MAPPING" am: cad1f726a8 by Treehugger Robot · 9 weeks ago
  3. cad1f72 Merge "Update TEST_MAPPING" by Treehugger Robot · 9 weeks ago
  4. 9a6d456 Update TEST_MAPPING by Matthew Maurer · 9 weeks ago
  5. 14959d5 Update TEST_MAPPING am: f3497358e4 am: 91d5d64bf2 by Matthew Maurer · 3 months ago

CESU-8 encoder/decoder for Rust

Build Status Latest version License


Convert between ordinary UTF-8 and CESU-8 encodings.

CESU-8 encodes characters outside the Basic Multilingual Plane as two UTF-16 surrogate chacaters, which are then further re-encoded as invalid, 3-byte UTF-8 characters. This means that 4-byte UTF-8 sequences become 6-byte CESU-8 sequences.

Note that CESU-8 is only intended for internal use within tightly-coupled systems, and not for data interchange.

This encoding is sometimes needed when working with Java, Oracle or MySQL, and when trying to store emoji, hieroglyphs, or other characters on the Supplementary Multilingual Plane or the Supplementary Ideographic Plane.


Some of this code is adapted from Rust's src/libcore/str.rs file. This code is covered by LICENSE-RUST.txt and copyright by The Rust Project Developers and individual Rust contributors, as described in that file.

The new code in this project is distributed under the same terms.