💨

データをヘブライ文字エンコード/デコードできる CLI ツールを作った

2022/08/28に公開

例えば画像などのバイナリデータを Base64 エンコードするとき、「Base64 ではなくヘブライ文字でエンコードできたらな」と思うことはありませんか?僕はありません。

そんなときに使える CLI ツール hebr を作ったので、その紹介です。

https://github.com/koki-develop/hebr

インストール

Go で作っているので go install でインストールできます。

$ go install github.com/koki-develop/hebr/cmd/hebr@latest

使い方

エンコード

hebr にヘブライ文字エンコードしたいデータを標準入力から渡して実行します。
エンコードしたデータは標準出力に出力されます。

$ echo hello | hebr
םבעצר,דןבט

もしくはエンコードしたいファイルを引数に指定することもできます。

$ hebr ./hello.txt
םבעצר,דןבט

デコード

-d フラグもしくは --decode フラグを指定するとヘブライ文字エンコードされたデータをデコードできます。
使い方はエンコードするときと同じです。

$ echo 'םבעצר,דןבט' | hebr -d
hello
$ hebr --decode ./hello.txt.hebr
hello

仕組み

Base64 の仕組みを参考にしています。

例えば hoge という文字列をヘブライ文字エンコードするとします。

hoge

まずエンコードしたいデータをバイナリ ( 2進数 ) に変換します。

hoge
↓
01101000 01101111 01100111 01100101

このバイナリを 5 ビットずつに分割します。

01101000 01101111 01100111 01100101
↓
01101 00001 10111 10110 01110 11001 01

このときに末尾のバイナリが 5 ビットに達していない場合は、足りていない分を 0 で埋めます。

01101 00001 10111 10110 01110 11001 01
↓
01101 00001 10111 10110 01110 11001 01000

こうしてできた 5 ビットずつのバイナリを、変換表をもとにそれぞれヘブライ文字に変換して完了です。

01101 00001 10111 10110 01110 11001 01000
↓
טשמצקבם
変換表
"00000": "א"
"00001": "ב"
"00010": "ג"
"00011": "ד"
"00100": "ה"
"00101": "ו"
"00110": "ז"
"00111": "ח"
"01000": "ט"
"01001": "י"
"01010": "ך"
"01011": "כ"
"01100": "ל"
"01101": "ם"
"01110": "מ"
"01111": "ן"
"10000": "נ"
"10001": "ס"
"10010": "ע"
"10011": "ף"
"10100": "פ"
"10101": "ץ"
"10110": "צ"
"10111": "ק"
"11000": "ר"
"11001": "ש"
"11010": "ת"
"11011": ","
"11100": "."
"11101": "!"
"11110": "?"
"11111": "-"

デコードするときは上記手順を逆に行うだけです。

ライブラリとして使う

ちなみに hebr は CLI ツールとしてだけでなくライブラリとして使用することもできます。

main.go
package main

import (
	"fmt"
	"log"

	"github.com/koki-develop/hebr"
)

func main() {
	data := []byte("data")

	// encode data
	encoded, err := hebr.Encode(data)
	if err != nil {
		log.Fatalln(err)
	}
	fmt.Println(string(encoded))
	// => לסנקטרט

	// decode data
	decoded, err := hebr.Decode(encoded)
	if err != nil {
		log.Fatalln(err)
	}
	fmt.Println(string(decoded))
	// => data
}

まとめ

誰が使うねん。

Discussion