ecoji

Encodes (and decodes) data as emojis

Github星跟蹤圖

Ecoji ????

Ecoji encodes data as 1024 emojis, its base1024 with an emoji character set. As a bonus, includes code to decode emojis to original data.

Many have asked how Ecoji compares to base64. The short answer is that Ecoji is more bytes, but less visible characters. With Ecoji each visible char represents 10 bits, but each character is multi-byte. With base64 each char represents 6 bits and is one byte. The following table shows encoding sha256 in different ways.

Encoding, Bytes, Characters
---------, -------, -----------
none, 32, N/A
hex, 64, 64
base64, 44, 44
ecoji, 112, 28

Installing

Ecoji is published to snapcraft.io and can be installed with :

sudo snap install ecoji

Examples of running

Encode example :

$ echo "Base64 is so 1999, isn't there something better?", ecoji
????????????????????????????????????????

Decode example :

$ echo ????????????????????????????????????????, ecoji -d
Base64 is so 1999, isn't there something better?

Concatenation :

$ echo -n abc, ecoji
???☕
$ echo -n 6789, ecoji
????
$ echo XY, ecoji
???☕
$ echo ???☕???????☕, ecoji -d
abc6789XY

Make your hashes more interesting. When using for hashes, consideration should be given for older systems without utf8 emoji support, different fonts, and similar emojis.

$ cat encode.go, openssl dgst -binary -sha1, ecoji
????????????????
$ echo ????????????????, ecoji -d, openssl base64
GhAkTyOY/Pta78KImgvofylL19M=
$ cat encode.go, openssl dgst -binary -sha1, openssl base64
GhAkTyOY/Pta78KImgvofylL19M=

Make a cool URL shortener. Four base1024 emojis can represent 1 trillion unique IDs. In the example below af82dd48f7 represents a 5 byte id for a URL in a key value store like Accumulo. When someone enters the URL, the 5 byte id could be used to obtain the actual URL from the database and then redirect.

$ printf "https://ecoji.io/%s\n" $(echo af82dd48f7, xxd -r -p, ecoji)
https://ecoji.io/????

Data encoded with Ecoji sorts the same as the input data.

$ echo -n a, ecoji > /tmp/test.ecoji
$ echo -n ab, ecoji >> /tmp/test.ecoji
$ echo -n abc, ecoji >> /tmp/test.ecoji
$ echo -n abcd, ecoji >> /tmp/test.ecoji
$ echo -n ac, ecoji >> /tmp/test.ecoji
$ echo -n b, ecoji >> /tmp/test.ecoji
$ echo -n ba, ecoji >> /tmp/test.ecoji
$ export LC_ALL=C
$ sort /tmp/test.ecoji > /tmp/test-sorted.ecoji
$ diff /tmp/test.ecoji /tmp/test-sorted.ecoji
$ cat /tmp/test-sorted.ecoji
?☕☕☕
??☕☕
???☕
???⚜
??☕☕
?☕☕☕
??☕☕

Usage :

$ ecoji -h
usage: ecoji [OPTIONS]... [FILE]

Encode or decode data as Unicode emojis. ?

Options:
    -d, --decode          decode data
    -w, --wrap=COLS       wrap encoded lines after COLS character (default 76).
                          Use 0 to disable line wrapping
    -h, --help            Print this message
    -v, --version         Print version information.

Libraries

Libraries implementing the Ecoji encoding standard. Submit PR to add a library to the table., Language, Comments, ----------, ----------, D, Implementation of Ecoji written in the D programming language., Go, This repository offers a Go library package with two functions ecoji.Encode() and ecoji.Decode()., Java, Implementation of Ecoji written in Java, usable in any JVM language., PHP, PHP 7.x implementation of Ecoji. Available as rayne/ecoji on Packagist., Python, Implementation of Ecoji written in the Python3 programming language., Rust, Implementation of Ecoji written in the Rust programming language., Swift, Implementation of Ecoji written in the Swift programming language.

Build instructions.

This is my first Go project, I am starting to get my bearings. If you are new
to Go I would recommend this video and the tour.

# The following are general Go setup instructions.  Ignore if you know Go, I am new to it.
export GOPATH=~/go
export PATH=$GOPATH/bin:$PATH

# This will download Ecoji to $GOPATH/src
go get github.com/keith-turner/ecoji

# This will build the ecoji command and put it in $GOPATH/bin
go install github.com/keith-turner/ecoji/cmd/ecoji

主要指標

概覽
名稱與所有者keith-turner/ecoji
主編程語言Go
編程語言Go (語言數: 2)
平台
許可證Apache License 2.0
所有者活动
創建於2018-03-05 05:02:09
推送於2024-07-15 18:13:25
最后一次提交
發布數3
最新版本名稱v2.0.1 (發布於 )
第一版名稱v1.0.0 (發布於 )
用户参与
星數856
關注者數10
派生數25
提交數131
已啟用問題?
問題數17
打開的問題數5
拉請求數17
打開的拉請求數1
關閉的拉請求數2
项目设置
已啟用Wiki?
已存檔?
是復刻?
已鎖定?
是鏡像?
是私有?