💨
データをヘブライ文字エンコード/デコードできる CLI ツールを作った
例えば画像などのバイナリデータを Base64 エンコードするとき、「Base64 ではなくヘブライ文字でエンコードできたらな」と思うことはありませんか?僕はありません。
そんなときに使える CLI ツール 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