#binary-data #binary-encoding #binary #byte #percent #ascii-text

无std tick-encoding

一种简单的编码方案,将二进制数据编码成ASCII字符串

3个版本

0.1.2 2024年1月29日
0.1.1 2024年1月29日
0.1.0 2024年1月28日

1829编码

Download history 3/week @ 2024-03-12 15/week @ 2024-03-26 75/week @ 2024-04-02 104/week @ 2024-04-09 50/week @ 2024-04-16 30/week @ 2024-04-23 12/week @ 2024-04-30 9/week @ 2024-05-07 113/week @ 2024-05-14 198/week @ 2024-05-21 273/week @ 2024-05-28 188/week @ 2024-06-04 19/week @ 2024-06-11 65/week @ 2024-06-18 107/week @ 2024-06-25

每月420 次下载

MIT或Unlicense

26KB
453

Crates.io docs.rs Minimum Supported Rust Version Tests

Tick Encoding是一种简单的编码方案,将任意二进制数据编码成ASCII字符串,以Rust crate的形式实现。它主要用于将通常的ASCII数据填充到JSON字符串中。它非常类似于百分编码/URL编码,但有一些关键的区别

  • 使用反引号(`)而不是百分号(%)作为转义字符
  • 任何二进制数据的一个规范编码
  • 一组需要转义的字符保持一致
  • 需要转义的字符更少

用法

通过运行 cargo add tick-encodingtick-encoding crate 作为Rust依赖项安装。

// Encode the input into a tick-encoded ASCII string
let encoded = tick_encoding::encode("hello, world! 🙂".as_bytes());
assert_eq!(encoded, "hello, world! `F0`9F`99`82");

// Decode it back into a UTF-8 string
let decoded = tick_encoding::decode(encoded.as_bytes()).unwrap();
let decoded_str = std::str::from_utf8(&decoded).unwrap();
assert_eq!(decoded_str, "hello, world! 🙂");

Cargo功能

tick-encoding crate 包含以下 Cargo 功能

  • std (默认): 启用使用Rust标准库的功能。禁用以在 #![no_std] 模式下构建。
  • alloc (默认): 启用依赖于全局分配器的功能。禁用此功能将大大限制您可以使用的功能!
  • safe: 避免不安全代码。默认情况下,会使用少量不安全代码(所有代码都经过广泛的单元测试、属性测试和Miri检查)。启用此功能将切换到纯安全代码,并在crate级别启用 #![deny(unsafe_code)] 检查。

编码方案

Tick Encoding的编码方案很简单

  • 除了反引号(`)以外的所有可打印ASCII字节都被编码为原样(从 0x210x5F,以及从 0x610x7E
  • ASCII制表符、换行符、回车符和空格字符也被原样编码(0x090x0A0x0D0x20
  • 反引号(`)被编码为两个反引号(0x60变为0x60 0x60
  • 所有其他字节都被编码为反引号后跟两个大写十六进制字符

解码过程正好相反。为了确保解码和重新编码产生相同的输出字符串,在解码过程中会验证编码字符串

  • 编码字符串只能包含可打印的ASCII字符、制表符、换行符、回车符和空格
  • 反引号后面必须跟一个反引号或两个大写十六进制字符

依赖项

~115KB