#string #unicode #unicode-text #traits #utility #text-encoding #text

utf64

一个将 utf-8 字符串编码为 utf-64 并解码回它们的实用工具

3 个版本 (稳定)

1.0.1 2024年2月7日
1.0.0 2023年9月27日
0.1.0 2023年9月13日

文本处理 中排名第 299

自定义许可协议

16KB
181

utf-64

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 解码为
_ 原样
az 原样
09 原样
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