> zeromq | source-safe | efficient <
// Z85 - ZeroMQ の Base85 変種。ソースコードや JSON に安全に埋め込めるテキスト表現
[SOURCE-SAFE]
ソースコードに優しい
ダブルクォート、バックスラッシュ、空白などの問題になりやすい文字を含まないため、C/C++ の文字列リテラルや JSON にそのまま貼り付けできます。
[EFFICIENT]
高い情報密度
4 バイトを 5 文字に変換し、Base64(約 33% のオーバーヘッド)よりも小さなオーバーヘッド(約 25%)でバイナリをテキスト化します。
[ZEROMQ]
ZeroMQ 標準
ZeroMQ がテキストベースのプロトコルでバイナリを扱う際に採用している公式エンコード方式です。
>> 技術情報
Z85 の仕組み:
Z85 は 4 バイトのブロックを 5 文字のテキストに変換します。85 個の印字可能 ASCII 文字から構成されるアルファベットが使われており、その選定によって多くの言語でエスケープ不要な文字列になります。
例:
"Hello" → nm=QNz.92
Z85 を使う理由:
- >バイナリデータをソースコードや設定ファイル内に直接埋め込みたい場合
- >JSON や YAML / TOML のフィールドにバイナリを載せつつ、エスケープを最小限に抑えたい場合
- >Base64 よりコンパクトなテキスト表現を求める場合
- >ZeroMQ ベースのメッセージングやプロトコルと自然に連携したい場合
- >テキストベース API でペイロードのフォーマットを統一したい場合
>> よくある質問
Z85 とは何ですか?
Z85 は ZeroMQ が定義した Base85 エンコード方式で、85 種類の印字可能 ASCII 文字のみを使い、ソースコード内や JSON でエスケープなしに扱えるよう設計されています。
Z85 と通常の Base85 の違いは?
他の Base85 と異なり、Z85 では引用符やバックスラッシュ、空白など多くの言語でエスケープが必要になる文字をアルファベットから除外しています。
どんな場面で Z85 を使うべきですか?
ライブラリのサンプルコード、設定ファイル、テキストベースの RPC プロトコルなどにバイナリを埋め込みたいときに特に便利です。
Z85 には長さの制約がありますか?
Z85 では元のバイナリ長が 4 バイトの倍数である必要があります。エンコーダー側でパディングを行うことは可能ですが、デコード時にはこの制約を意識して扱う必要があります。