#twitter #binary-data #data-encoding #character-encoding #tweet #encode #platform

base2048

为Twitter上的二进制数据高效编码的base2048编码

6个版本 (2个稳定版)

2.0.2 2021年10月3日
1.0.0 2021年10月2日
0.2.1 2020年7月28日
0.1.1 2020年7月28日

#1985 in 编码

0BSD 许可证

25KB
156

rust-base2048   crates_badge actions_badge docs_badge

将数据打包到推文中的base2048编码!

这是一个实验性模块,用于将11位的数据块编码为单个字符如Twitter所计。这允许你在推文中编码385(280 * 11 / 8)个字节。

这个crate主要努力做对的事情

  1. 在大多数平台上显示的字符。
  2. 不使用从右到左的字符。
  3. 不包含奇怪的标点符号字符。

有关字符的有序列表,请参阅base2048.txt

使用

[dependencies]
base2048 = "2"

示例

// these 189 will never fit in a tweet encoded as hex
let bytes = hex_literal::hex!("0100000001574981a3fb74e6632493fcab62947b07a6c228c2b9d840893ff1e7c4f143723c010000006a47304402201f2fc511e390f5dcecf5f0fcb627faff9c0acec671bf372c49e30b43cab048ff02200a10eefea2f2c7b1c5a1603b73dc4d3175b9a416db0acfedf9bf443c0be219c90121031132f6c2139c199a18bfe1fb7f7eb5d1daaf8d4d2e03bf11e833a13e62268fb5ffffffff01eda54e020000000017a914582e495bd15671cc7344ff54104a4d3e6468fff08700000000");

// but with base2048 you can fit it - twice!
let encoded = base2048::encode(&bytes[..]);
assert_eq!(encoded, "ÅØØÒԾആ১ԍཪƉǧႵషϡဏၾഓπ௫ఇĄ૪൦Ⴏ၍ƜসÍص୷སΰňþҕЙၑήಟဖ௴ͿӻआइԚџവফඤѕળशĹсϗႫॳšķ۹ঙјఓȨёՑʮǴരౡଣౙഗ૩ໜໝŇऔཀඨΑΟɈઉທΣઠගऽइƽ೪ჁಔດևЫѱʟॺଅԻͳʼnଢӸ྾྾ვʭମԙउØØĞଥওȲϦၺழƦʍşဃłФЍ൰১ႭƠØØØ");
assert_eq!(base2048::decode(&encoded), Some(bytes.to_vec()));

先前的工作

这受到了base2048 JavaScript模块的启发,但它们不兼容。主要区别在于这里的字符列表更加精心编排,以便在各个平台上正确显示。

无运行时依赖