使用方法
- 選擇「編碼」把文字或位元組轉換為 basE91,或選擇「解碼」把 basE91 還原為資料。
- 輸入或貼上內容,也可以開啟檔案。處理原始位元組時請把輸入切換為「十六進位」。
- 結果會隨輸入即時更新。解碼時可選擇文字或十六進位輸出。
- 複製結果,或將結果下載為檔案。
什麼是 basE91?
basE91 是由 Joachim Henke 設計的二進位轉文字編碼。它使用 95 個可列印 ASCII 字元中的 91 個,只排除了空格、單引號 '、連字元 - 和反斜槓 \。
它不按固定的位元組塊處理資料。編碼器把輸入的位放進緩衝區,每次取 13 位:如果這 13 位的值大於 88,就寫成兩個字元;如果小於或等於 88,就再多取 1 位,湊成 14 位。之所以可行,是因為兩個 91 進位字元可以表示 91 × 91 = 8281 個不同的值。所以每 13 或 14 位都正好變成 2 個字元。
因此,basE91 的體積開銷最多約為 23%,對含有大量連續零位元組的資料可低至約 14%。隨機資料或已壓縮的資料通常接近上限。
basE91 與其他編碼的比較
| 編碼 | 字元數 | 輸出大小 |
|---|---|---|
| 十六進位 | 16 | 原資料的 2 倍 |
| Base58 | 58 | 約 1.37 倍 |
| Base64 | 64 | 1.33 倍 |
| Base85 / Ascii85 | 85 | 1.25 倍 |
| basE91 | 91 | 約 1.14 到 1.23 倍 |
想用自己的資料比較實際長度,可以把它輸入 所有編碼 工具。
使用時的注意事項
- 轉義。字母表中包含雙引號
",在 JSON 和大多數程式語言的字串中需要轉義;還包含<、>、&,在 HTML 和 XML 中需要轉義。basE91 也不能直接用於 URL。 - 需要完整解碼。由於位會跨越字元邊界,從 basE91 字串中間擷取的一段無法單獨解碼。
- 支援情況。basE91 不是 IETF 標準。作者提供了 C 等語言的參考實現,大多數平臺也有移植版本,例如 Python 的
base91包。
編碼規格
| 字母表 | 91 個可列印 ASCII 字元 |
|---|---|
| 輸出體積 | 約 123% |
| 填充 | 無 |
| 標準 | basE91(Joachim Henke) |
| 區分大小寫 | 是 |
編碼範例
| 輸入 (UTF-8) | 輸出 |
|---|---|
Hello, World! | >OwJh>}AQ;r@@Y?F |
Base64.is | xD7gXm^?t#5 |
你好 | I_5k7aPE |
常見問題
basE91 比 Base64 更省空間嗎?
是的。Base64 固定增加 33%,而 basE91 最多增加約 23%,對零位元組較多的資料還會更少。以 1 MB 的檔案為例,大約可以節省 100 KB。
basE91 使用哪些字元?
字母
A-Z 和 a-z、數字 0-9,以及符號 !#$%&()*+,./:;<=>?@[]^_`{|}~"。空格、單引號、連字元和反斜槓不在其中。為什麼寫作 basE91?
這是作者給這種編碼起的名字的寫法。basE91 和 Base91 指的是同一種編碼,本頁採用的就是原始演算法。
空格和換行會影響解碼嗎?
不會。空格和換行不屬於字母表,本工具解碼時會自動忽略它們,因此可以直接貼上分行的 basE91 文字。