2个不稳定版本
0.1.0 | 2021年9月5日 |
---|---|
0.0.1 | 2019年6月2日 |
#2061 in 编码
2,663 每月下载量
用于 12 个crate(4 个直接使用)
25KB
380 行
basE91的Rust实现
basE91是一种将二进制数据编码为ASCII字符的高级方法。它与base64类似,但更高效。basE91产生的开销取决于输入数据。最多为23%(与base64的33%相比),通常可降至14%,这通常发生在0字节块上。
更多信息请参阅 http://base91.sourceforge.net/
Joachim Henke为Rust实现的 basE91编码。
还支持xml-friendly base91实现,由r-lyeh提供,支持引用,且对JSON、XML和TSV友好。
库功能
示例
使用辅助函数
let source = "This is a random binary string";
let encode_as_vec: Vec<u8> = base91::slice_encode(source.as_bytes());
let decode_as_vec: Vec<u8> = base91::slice_decode(&encode_as_vec);
assert_eq!(
"nX,<:WRT%yxtYQ:mbr4JB*H[LR/@Qj{o0aU=Z",
String::from_utf8_lossy(&encode_as_vec)
);
assert_eq!(
"This is a random binary string",
String::from_utf8_lossy(&decode_as_vec)
);
使用迭代器
let source = "This is a random binary string";
let as_vec: Vec<u8> = base91::EncodeIterator::new(source.bytes()).collect();
let as_str: String = base91::EncodeIterator::new(source.bytes()).as_char_iter().collect();
assert_eq!(
"nX,<:WRT%yxtYQ:mbr4JB*H[LR/@Qj{o0aU=Z",
String::from_utf8_lossy(&as_vec)
);
assert_eq!(
"nX,<:WRT%yxtYQ:mbr4JB*H[LR/@Qj{o0aU=Z",
as_str
);
使用XML友好或其他特定变体
注意!如果您禁用功能 canonical
并启用功能 xml-friendly
,则 base91::EncodeIterator
和 base91::DecodeIterator
将默默地使用XmlFriendly变体。反过来,所有辅助函数都内部使用迭代器(slice_encode
和 slice_decode
)。
use base91::iter::{EncodeGenericIterator, DecodeGenericIterator};
use base91::codemap::XmlFriendly;
let source = "This is a random binary string";
let encode_as_vec: Vec<u8> = EncodeGenericIterator::<XmlFriendly, _>::new(source.bytes()).collect();
let decode_as_vec: Vec<u8> = DecodeGenericIterator::<XmlFriendly, _>::new(encode_as_vec.iter().copied()).collect();
assert_eq!(
"nX,-:WRT%yxtYQ:mbr4JB*H[LR/@Qj{o0aU=Z",
String::from_utf8_lossy(&encode_as_vec)
);
assert_eq!(
"This is a random binary string",
String::from_utf8_lossy(&decode_as_vec)
);
许可证
当前的Rust实现提供在双 MIT/Apache2
许可证下。
致谢
原始的basE91是由Joachim Henke开发的,作为免费软件在BSD许可证的条款下发布。