3个版本
0.1.2 | 2024年1月29日 |
---|---|
0.1.1 | 2024年1月29日 |
0.1.0 | 2024年1月28日 |
1829 在 编码
每月420 次下载
26KB
453 行
Tick Encoding是一种简单的编码方案,将任意二进制数据编码成ASCII字符串,以Rust crate的形式实现。它主要用于将通常的ASCII数据填充到JSON字符串中。它非常类似于百分编码/URL编码,但有一些关键的区别
- 使用反引号(`)而不是百分号(
%
)作为转义字符 - 任何二进制数据的一个规范编码
- 一组需要转义的字符保持一致
- 需要转义的字符更少
用法
通过运行 cargo add tick-encoding
将 tick-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字节都被编码为原样(从
0x21
到0x5F
,以及从0x61
到0x7E
) - ASCII制表符、换行符、回车符和空格字符也被原样编码(
0x09
,0x0A
,0x0D
和0x20
) - 反引号(`)被编码为两个反引号(
0x60
变为0x60 0x60
) - 所有其他字节都被编码为反引号后跟两个大写十六进制字符
解码过程正好相反。为了确保解码和重新编码产生相同的输出字符串,在解码过程中会验证编码字符串
- 编码字符串只能包含可打印的ASCII字符、制表符、换行符、回车符和空格
- 反引号后面必须跟一个反引号或两个大写十六进制字符
依赖项
~115KB