LoginSignup
3
1

More than 1 year has passed since last update.

base256エンコード

Last updated at Posted at 2023-03-18

これは何?

base64 があるなら、base256 があってもいいんじゃないかと思って記事にした。

base64

base64 は、ふつうに使える文字で普通のバイト列を送りたいと思って作ったもの。
ASCII の、制御文字以外で、7bit 文字のみという制約でも 64種類の文字があれば 一文字で 6bit の情報になる。
4文字あれば、3バイトになる。

というもの

base256

おもいつき

今は unicode があるので、文字を 256 種類用意するのはたやすい。
だったら 256 種類使っちゃえばいいよね、と思った。

utf-8 にすると 1文字2バイト(など)になるのでバイト列としての効率は悪くなるけど、そもそもテキストに変換している時点でバイト列としての効率なんて気にしてないんじゃないかと思う。

ASCII の英数字と同じ幅の文字を採用すれば、画面に占めるサイズとしては小さくなる。
そのまま使える文字を残すことで、エンコードされた状態でもぼんやり中身がわかったりして便利。

仕様案

英数字と下線はそのまま使う。
それ以外は変換テーブルで変換。

変換テーブル案は下記。

binary 00 01 02 03 04 05 06 07
encoded À(U+c0) Á(U+c1) Â(U+c2) Ã(U+c3) Ä(U+c4) Å(U+c5) Æ(U+c6) Ç(U+c7)
binary 08 09 0a 0b 0c 0d 0e 0f
encoded È(U+c8) É(U+c9) Ê(U+ca) Ë(U+cb) Ì(U+cc) Í(U+cd) Î(U+ce) Ï(U+cf)
binary 10 11 12 13 14 15 16 17
encoded Ð(U+d0) Ñ(U+d1) Ò(U+d2) Ó(U+d3) Ô(U+d4) Õ(U+d5) Ö(U+d6) Ø(U+d8)
binary 18 19 1a 1b 1c 1d 1e 1f
encoded Ù(U+d9) Ú(U+da) Û(U+db) Ü(U+dc) Ý(U+dd) Þ(U+de) ß(U+df) à(U+e0)
binary 20 21 22 23 24 25 26 27
encoded á(U+e1) â(U+e2) ã(U+e3) ä(U+e4) å(U+e5) æ(U+e6) ç(U+e7) è(U+e8)
binary 28 29 2a 2b 2c 2d 2e 2f
encoded é(U+e9) ê(U+ea) ë(U+eb) ì(U+ec) í(U+ed) î(U+ee) ï(U+ef) ð(U+f0)
binary 30(0) 31(1) 32(2) 33(3) 34(4) 35(5) 36(6) 37(7)
encoded 0(U+30) 1(U+31) 2(U+32) 3(U+33) 4(U+34) 5(U+35) 6(U+36) 7(U+37)
binary 38(8) 39(9) 3a 3b 3c 3d 3e 3f
encoded 8(U+38) 9(U+39) ñ(U+f1) ò(U+f2) ó(U+f3) ô(U+f4) õ(U+f5) ö(U+f6)
binary 40 41(A) 42(B) 43(C) 44(D) 45(E) 46(F) 47(G)
encoded Ā(U+100) A(U+41) B(U+42) C(U+43) D(U+44) E(U+45) F(U+46) G(U+47)
binary 48(H) 49(I) 4a(J) 4b(K) 4c(L) 4d(M) 4e(N) 4f(O)
encoded H(U+48) I(U+49) J(U+4a) K(U+4b) L(U+4c) M(U+4d) N(U+4e) O(U+4f)
binary 50(P) 51(Q) 52(R) 53(S) 54(T) 55(U) 56(V) 57(W)
encoded P(U+50) Q(U+51) R(U+52) S(U+53) T(U+54) U(U+55) V(U+56) W(U+57)
binary 58(X) 59(Y) 5a(Z) 5b 5c 5d 5e 5f(_)
encoded X(U+58) Y(U+59) Z(U+5a) ā(U+101) Ă(U+102) ă(U+103) Ą(U+104) _(U+5f)
binary 60 61(a) 62(b) 63(c) 64(d) 65(e) 66(f) 67(g)
encoded ą(U+105) a(U+61) b(U+62) c(U+63) d(U+64) e(U+65) f(U+66) g(U+67)
binary 68(h) 69(i) 6a(j) 6b(k) 6c(l) 6d(m) 6e(n) 6f(o)
encoded h(U+68) i(U+69) j(U+6a) k(U+6b) l(U+6c) m(U+6d) n(U+6e) o(U+6f)
binary 70(p) 71(q) 72(r) 73(s) 74(t) 75(u) 76(v) 77(w)
encoded p(U+70) q(U+71) r(U+72) s(U+73) t(U+74) u(U+75) v(U+76) w(U+77)
binary 78(x) 79(y) 7a(z) 7b 7c 7d 7e 7f
encoded x(U+78) y(U+79) z(U+7a) Ć(U+106) ć(U+107) Ĉ(U+108) ĉ(U+109) Ċ(U+10a)
binary 80 81 82 83 84 85 86 87
encoded ċ(U+10b) Č(U+10c) č(U+10d) Ď(U+10e) ď(U+10f) Đ(U+110) đ(U+111) Ē(U+112)
binary 88 89 8a 8b 8c 8d 8e 8f
encoded ē(U+113) Ĕ(U+114) ĕ(U+115) Ė(U+116) ė(U+117) Ę(U+118) ę(U+119) Ě(U+11a)
binary 90 91 92 93 94 95 96 97
encoded ě(U+11b) Ĝ(U+11c) ĝ(U+11d) Ğ(U+11e) ğ(U+11f) Ġ(U+120) ġ(U+121) Ģ(U+122)
binary 98 99 9a 9b 9c 9d 9e 9f
encoded ģ(U+123) Ĥ(U+124) ĥ(U+125) Ħ(U+126) ħ(U+127) Ĩ(U+128) ĩ(U+129) Ī(U+12a)
binary a0 a1 a2 a3 a4 a5 a6 a7
encoded ī(U+12b) Ĭ(U+12c) ĭ(U+12d) Į(U+12e) į(U+12f) İ(U+130) ı(U+131) IJ(U+132)
binary a8 a9 aa ab ac ad ae af
encoded ij(U+133) Ĵ(U+134) ĵ(U+135) Ķ(U+136) ķ(U+137) ĸ(U+138) Ĺ(U+139) ĺ(U+13a)
binary b0 b1 b2 b3 b4 b5 b6 b7
encoded Ļ(U+13b) ļ(U+13c) Ľ(U+13d) ľ(U+13e) Ŀ(U+13f) ŀ(U+140) Ł(U+141) ł(U+142)
binary b8 b9 ba bb bc bd be bf
encoded Ń(U+143) ń(U+144) Ņ(U+145) ņ(U+146) Ň(U+147) ň(U+148) ʼn(U+149) Ŋ(U+14a)
binary c0 c1 c2 c3 c4 c5 c6 c7
encoded ŋ(U+14b) Ō(U+14c) ō(U+14d) Ŏ(U+14e) ŏ(U+14f) Ő(U+150) ő(U+151) Œ(U+152)
binary c8 c9 ca cb cc cd ce cf
encoded œ(U+153) Ŕ(U+154) ŕ(U+155) Ŗ(U+156) ŗ(U+157) Ř(U+158) ř(U+159) Ś(U+15a)
binary d0 d1 d2 d3 d4 d5 d6 d7
encoded ś(U+15b) Ŝ(U+15c) ŝ(U+15d) Ş(U+15e) ş(U+15f) Š(U+160) š(U+161) Ţ(U+162)
binary d8 d9 da db dc dd de df
encoded ţ(U+163) Ť(U+164) ť(U+165) Ŧ(U+166) ŧ(U+167) Ũ(U+168) ũ(U+169) Ū(U+16a)
binary e0 e1 e2 e3 e4 e5 e6 e7
encoded ū(U+16b) Ŭ(U+16c) ŭ(U+16d) Ů(U+16e) ů(U+16f) Ű(U+170) ű(U+171) Ų(U+172)
binary e8 e9 ea eb ec ed ee ef
encoded ų(U+173) Ŵ(U+174) ŵ(U+175) Ŷ(U+176) ŷ(U+177) Ÿ(U+178) Ź(U+179) ź(U+17a)
binary f0 f1 f2 f3 f4 f5 f6 f7
encoded Ż(U+17b) ż(U+17c) Ž(U+17d) ž(U+17e) ſ(U+17f) ƀ(U+180) Ɓ(U+181) Ƃ(U+182)
binary f8 f9 fa fb fc fd fe ff
encoded ƃ(U+183) Ƅ(U+184) ƅ(U+185) Ɔ(U+186) Ƈ(U+187) ƈ(U+188) Ɖ(U+189) Ɗ(U+18a)

補足

  • base256 → バイナリ変換時は、改行空白を読み飛ばす。
  • 終端記号がある方が便利かもしれないけど、無くていいかなと思った。
  • \%, " 等が含まれないので、そのままファイル名に使うとかもありかも。
  • 前述の変換テーブルはまったく深く考えずに作ったけど、以下に留意してもうちょっと真剣に考えると利便性が高まるかも。
    • 多くのフォントに含まれる文字が良い。
    • 幅が ASCII の英数字と同じになる場合が多い文字が良い。
    • UTF-8 で 2バイト以下になる文字が良い。
    • 句読点とみなされない文字が良い。
    • 英数字っぽくない見た目がいいかも。

シフトJIS などに変換されたら失われる文字が無いほうが便利かもしれないけど、シフトJIS互換ルールよりも UTF-8 で 2バイト以下ルールが大事じゃないかと思う。どうだろ。両方満たすことができればそれは嬉しいけど、無理じゃないかと想像する(未調査)。

3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1