3 个版本 (稳定)
1.0.1 | 2024年2月7日 |
---|---|
1.0.0 | 2023年9月27日 |
0.1.0 | 2023年9月13日 |
在 文本处理 中排名第 299
16KB
181 行
JSONish 字符串的一种简洁、易于阅读、URL 安全的编码
概述
当您需要将字符串编码以使其成为 URL 安全,同时又要尽可能保持其小巧和可读性(与 base64 不同)时,请使用此工具。例如
输入字符串 | base64 | utf64 |
---|---|---|
Hello | SGVsbG8= | YHello |
"Hello!" | IkhlbGxvISI= | AYHelloGA |
{"Hello":"world"} | eyJIZWxsbyI6IndvcmxkIn0= | MAYHelloAFAworldAN |
我制作这个工具是因为我想构建一个具有良好 JSON 架构的 Web API,并且也可以由 CDN 缓存。为了使其可缓存,我必须使用 GET 方法;但 GET 方法不能(可移植地)有请求体,这意味着所有 API 参数都需要打包到 URL 中。UTF-64 是解决这个问题的一种简单方法。
UTF-64 使用非常宽松的 0BSD 许可协议,因此您可以在任何地方自由使用此代码和规范。我选择 0BSD 是因为它似乎是公司最广泛接受的“公共领域等效”许可,例如,Google 有一个 特定的例外情况,允许使用 0BSD。
安装与使用
JavaScript
npm install utf64
import * as utf64 from "utf64";
console.log(utf64.encode("Hello!"));
console.log(utf64.decode("YHelloG"));
Python
pip install utf64
import utf64
print(utf64.encode("Hello!"))
print(utf64.decode("YHelloG"))
Go
go get utf64.moreplease.com
package main
import (
"fmt"
"utf64.moreplease.com"
)
func main() {
fmt.Println(utf64.Encode("Hello!"))
result, err := utf64.Decode("YHelloG")
if err != nil {
panic(err)
}
fmt.Println(result)
}
Rust
由 Mark Musante (@mjmusante) 捐赠
cargo add utf64
use utf64::*;
fn main() {
println!("{}", "Hello!".encode_utf64().unwrap());
match "YHelloG".decode_utf64() {
Ok(result) => println!("{result}"),
Err(e) => panic!("{e}"),
}
}
命令行工具
JS 包包含一个 utf64
命令行工具
npm install -g utf64
utf64 "Hello\!"
utf64 -d YHelloG
规范
输出使用与 base64url 兼容的字符进行编码:_ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-
utf64 | 解码为 |
---|---|
_ |
原样 |
a 到 z |
原样 |
0 到 9 |
原样 |
ABCDEFGHIJKLMNOPQRSTU |
映射到: "',.;:!?()[]{}#=+-*/\ |
V |
换行符 |
W |
空格 |
X |
Unicode 0-63的前缀。例如,"Xk "是"% " (U+0025) |
Y |
Unicode 64-127的前缀。例如,"Y_ "是"@ " (U+0040) |
Z |
Unicode 128+的前缀。以下字符被解释为UTF-8,通过移除多余的顶部两位来减少到6位字节。例如,"ZhBr "是"€ " (UTF-8 [11]100010 [10]000010 [10]101100 ) |
有关(希望)涵盖所有边缘情况(有效和无效编码)的测试,请参阅test.json
。
依赖项
~280–740KB
~17K SLoC