Skip to main content

Encoder/decoder for UTF-64, a URL-safe encoding for JSONish strings

Project description

utf64

A terse, human-readable, URL-safe encoding for JSONish strings.

Overview

Use this when you need to encode a string to make it URL-safe, but you also want to keep it as small and readable as possible (unlike base64). For example:

Input string base64 utf64
Hello SGVsbG8= YHello
"Hello!" IkhlbGxvISI= AYHelloGA
{"Hello":"world"} eyJIZWxsbyI6IndvcmxkIn0= MAYHelloAFAworldAN

I made this because I wanted to build a web API with a nice JSON schema that could also be cached by a CDN. To make it cacheable, I had to use the GET method; but GET can't (portably) have a request body, so this means all the API parameters need to be packed into the URL. utf64 is a fire-and-forget way to solve this problem.

Installation & usage

JavaScript

npm install utf64
import { str_to_utf64, utf64_to_str } from "utf64";

# Encode
console.log(str_to_utf64("Hello!"));

# Decode
console.log(utf64_to_str("YHelloG"));

Python

pip install utf64
from utf64 import str_to_utf64, utf64_to_str

# Encode
print(str_to_utf64("Hello!"))

# Decode
print(utf64_to_str("YHelloG"))

Command-line tool

The JS package includes a utf64 command-line tool:

npm install -g utf64
# Encode
echo -n "Hello\!" | utf64

# Decode
echo -n "YHelloG" | utf64 -d

Specification

Output is encoded using base64url-compatible characters: _ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-

utf64 Decoded as
_ As-is
a to z As-is
0 to 9 As-is
ABCDEFGHIJKLMNOPQRSTU Mapped to: "',.;:!?()[]{}#=+-*/\
V Newline
W Space
X Prefix for Unicode 0-63. For example, "Xk" is "%" (U+0025)
Y Prefix for Unicode 64-127. For example, "Y_" is "@" (U+0040)
Z Prefix for Unicode 128+. The following characters are interpreted as UTF-8, reduced to 6-bit bytes by stripping the redundant top two bits. For example, "ZhBr" is "" (UTF-8 [11]100010 [10]000010 [10]101100)

See test.json for tests that (hopefully) cover all the edge cases, for both valid and invalid encodings.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

utf64-0.0.5.tar.gz (4.3 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

utf64-0.0.5-py3-none-any.whl (3.4 kB view details)

Uploaded Python 3

File details

Details for the file utf64-0.0.5.tar.gz.

File metadata

  • Download URL: utf64-0.0.5.tar.gz
  • Upload date:
  • Size: 4.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: python-requests/2.31.0

File hashes

Hashes for utf64-0.0.5.tar.gz
Algorithm Hash digest
SHA256 c7677f0d01ac8ca5195d605116613a46f9047a8fe4589632737bb7444794e54d
MD5 560fd94d18e197520d4db4065828d861
BLAKE2b-256 96e2535c0af7c0814610789cbc40658522ed3f92648785550a86c00e5d3ece99

See more details on using hashes here.

File details

Details for the file utf64-0.0.5-py3-none-any.whl.

File metadata

  • Download URL: utf64-0.0.5-py3-none-any.whl
  • Upload date:
  • Size: 3.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: python-requests/2.31.0

File hashes

Hashes for utf64-0.0.5-py3-none-any.whl
Algorithm Hash digest
SHA256 c71436fc92dd301c58a4155caa32ad975784fc8fc31ffadc63b7a66e9aaaaf4c
MD5 ab9e511f1042edcd8abe44019c6be828
BLAKE2b-256 1f46402d3a2bf53fdfba7ef9d26acb3e27b5d4ad5b4b3c143098b676415e1bd2

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page