Encoding is the process of converting data from one form to another. Decoding means exactly the same thing. Though it’s often defined as a process, encoding also refers to a particular form of data (character encoding or media encoding).

Character encoding/decoding is particularly crucial in programming because computers recognize only binary data. It’s how we translate a sequence of characters (letters, numbers, symbols, punctuations, etc.) into a specialized format to help us speak the computer’s language and understand what it says back.

In this guide, we’ll demonstrate how to encode and decode your data in Rust.

Encoding and decoding in Rust

If you think encoding and decoding sound like a drag, you’re not alone. There are many edge cases and the process can be quite complex.

Fortunately, in Rust, as in many other programming languages, encoding and decoding are handled by modules that have been thoroughly tested against most of these edge cases. Efficient encoding and decoding libraries are especially critical for a language as close to the machine as Rust.

Encoding in Rust is relatively simple. Though it doesn’t come in the core Rust package, the few solutions developed by the community handle the job quite well. These tools enable you to send a string of characters to encode or decode through a function and receive the pursued result (encoded or decoded string).

base64 Rust library

base64 is designed to encode and decode to/from base64 as fast and precisely as possible. As its name suggests, it works only with base64. It literally has two transforming functions — encode() and decode() — along with configuration functions to help you shape the way it decodes and encodes.

extern crate base64;
use base64::{encode};
fn main() {
    let a = "hello world";
    println!("{}", encode(a)); // -> aGVsbG8gd29ybGQ=
}

Believe it or not, base64 is actually a first-class necessity when dealing with binary files on your computer. Base64 is commonly used to encode binary data (images, sound files etc), which are used in everything we share on the web, from emails attachment to saving files in our databases.

For a much deeper dive, head to base64 guru.

rust-encoding

rust-encoding supports a massive amount of character encoding (all those supported by the WHATWG standards). Quite uniquely, it handles errors by replacing the error received while treating a string by a specified value. When an error is detected, you can use the strict mode to completely stop execution=.

Encoding’s encode and decode methods convert a String to Vec<u8> and vice versa. Since there’s support for a lot of encoding types, the library ships with two ways to get your encoding:

  1. Encoding::all to which you attach the encoding you’ll use for the encoding process. All the unused encoding types are discarded from the binary
  2. encoding::label, which captures the encoding based on the label given and returns the static encoding type, resulting in a bigger binary
use encoding::{Encoding, EncoderTrap};
use encoding::all::ISO_8859_1; // use with all
use encoding::label::encoding_from_whatwg_label; // use with label

assert_eq!(ISO_8859_1.encode("caf\u{e9}", EncoderTrap::Strict),
Ok(vec![99,97,102,233]));
let euckr = encoding_from_whatwg_label("euc-kr").unwrap();
assert_eq!(euckr.name(), "windows-949");

rust-encoding is one of the top downloaded libraries (3.5k/week) even though it hasn’t been updated in four years. It’s safe to say that it’s extremely stable and robust.

#rust #programming #developer

How to Encode and Decode Your Data in Rust
13.00 GEEK