rfc.base64
- Base64エンコーディング ¶このモジュールでは、RFC 4648 (https://www.ietf.org/rfc/rfc4648.txt) で定義されている Base64フォーマットへエンコード/デコードするいくつかの 手続きを定義しています。同RFCで定義されている Base32フォーマット、Base16フォーマットもサポートしています。
共通の名前付け規則は次のとおりです。
encoding-encode, encoding-decode
ポートを使うストリームエンコーダー/デコーダー。 入力を現在の入力ポートから取り、結果を現在の出力ポートに出力します。
encoding-encode-message
入力を文字列かu8vectorで受け取り、エンコード結果を文字列で返します。 BaseNエンコーディングの結果は常に可読文字列になります。
encoding-decode-string-to
エンコードされた文字列を取り、結果をu8vectorもしくは文字列で返します。 どちらを返すからはtarget引数で指定されます。 デコード結果は一般にはバイトシーケンスになるので、文字列の場合は 不完全な文字列が返ることに注意してください。
{rfc.base64
}
現在の入力ポートからバイト・ストリームを読み込み、それを Base64 フォーマットに
エンコードし、現在の出力ポートに文字ストリームとして書き出します。
現在の入力ポートから EOF を読み込むと変換を終了します。
一行あたりの文字数がline-widthに与えられた文字数を越えないように、
改行文字が適切に出力に挿入されます。line-widthのデフォルト値は
RFC2045に従い76となっています。line-widthに#f
または0
を与えることで改行を抑制することができます。
Base64は62と63を表現するのにいくつかの異なるマッピングがあります。
「標準の」エンコーディングでは+
と/
が、
「URL安全」なエンコーディングでは-
と_
がそれぞれ使われます。
どちらを使うかはurl-safeまたはdigits引数で制御できます。
url-safeに真の値を与えると、URL安全なエンコーディングが使われます。
そうでない場合、digitsに2文字からなる文字列を渡すことができ、
1文字目が62を、2文字目が63を現す文字として使われます。
digits引数はSRFI-207をサポートするために追加されました
(srfi.207
- 文字列表示のバイトベクタ参照)。
omit-padding引数に真の値が与えられると、
パディング文字(#\=
)が省略されます
(RFC4648 Section 3.2参照 (https://www.rfc-editor.org/rfc/rfc4648#section-3.2))。
デフォルトではパディング文字は省略されません。
{rfc.base64
}
文字列かu8vectorのmessageをBase64エンコードして、結果を文字列で返します。
キーワード引数の意味は上のbase64-encode
と同じです。
(base64-encode-message "Hau'oli makahiki hou") ⇒ "SGF1J29saSBtYWthaGlraSBob3U="
ポータブルなコードでは、srfi.207
のbytestring->base64
を使うことができます
(srfi.207
- 文字列表示のバイトベクタ参照)。
{rfc.base64
}
現在の入力ポートから文字ストリームを読み込み、それを Base64 フォーマットとして
デコードし、現在の出力ポートにバイトストリームとして書き出します。
変換は EOF か、終端文字 (=
) を読み込むと終了します。
Base64 でエンコードされた文字として適当でない文字は、デフォルトでは黙って無視されます。 ただし、strictキーワード引数に真の値が与えられた場合は、 空白文字以外の不適切な文字が入力にあったらそこでエラーが投げられます。
入力が必要なパディング文字を欠いていても、デフォルトでは許容されます。 strict引数が真の場合は、入力に正しい数のパディング文字がないとエラーが投げられます。
digitsとurl-safeキーワード引数は62と63の異なるエンコーディングを
指定するのに使えます。詳しくは上のbase64-encod
のエントリを参照してください。
{rfc.base64
}
target引数はクラスオブジェクト<string>
か<u8vector>
でなければなりません。
Base64エンコードされた入力stringを取り、結果をtargetのインスタンスで
返します。
キーワード引数の意味は上のbase64-decode
と同じです。
(base64-decode-string-to <string> "SGF1J29saSBtYWthaGlraSBob3U=") ⇒ "Hau'oli makahiki hou" (base64-decode-string-to <u8vector> "SGF1J29saSBtYWthaGlraSBob3U=") ⇒ #u8(72 97 117 39 111 108 105 32 109 97 107 97 104 105 107 105 32 104 111 117)
結果を文字列で得る場合、不完全文字列が返される可能性があることに注意してください。
(base64-decode-string-to <string> "8PHy8w==") ⇒ #**"\xf0;\xf1;\xf2;\xf3;"
ポータブルなコードでは、srfi.207
のbase64->bytestring
を使うことができます
(srfi.207
- 文字列表示のバイトベクタ参照)。
RFC4648は基数32のエンコーディングとして2つの全く異なるアルファベットを規定しています。
標準のBase32はA-Z
を0から25に、2-7
を26から31に使います。
“base32hex” は0-9
を0から9に、A-V
を10から31に使います。
RFCでは後者をbase32と呼ばないように言っているので、
二つのエンコーディングに対応する別々の手続きを用意しました。
{rfc.base64
}
これらの手続きは現在の入力ポートからデータを読み、
Base32またはBase32hexでエンコードされた結果を現在の出力ポートに書き出します。
キーワード引数omit-paddingとline-widthは
base64-encode
と同じです。
{rfc.base64
}
文字列もしくはu8vectorのmessageをBase32/Base32hexでエンコードして、
結果を文字列として返します。
キーワード引数omit-paddingとline-widthは
base64-encode
と同じです。
(base32-encode-message "Hau'oli makahiki hou!") ⇒ "JBQXKJ3PNRUSA3LBNNQWQ2LLNEQGQ33VEE======" (base32hex-encode-message "Hau'oli makahiki hou!") ⇒ "91GNA9RFDHKI0RB1DDGMGQBBD4G6GRRL44======"
{rfc.base64
}
Base32/Base32hexエンコードされた文字列を現在の入力ポートから読み、
デコード結果を現在の出力ポートに書き出します。
strict引数に真の値が与えられると、
入力に空白文字でもエンコードに使われる文字でもない文字が現れたり、
必要なパディング文字が無かったりした場合にエラーが投げられます。
strictのデフォルト値は#f
で、不正な文字は単に無視されます。
{rfc.base64
}
Base32/Base32hexエンコードされた文字列stringをデコードして、
結果をtargetクラスのインスタンスとして返します。
targetはクラスオブジェクト<u8vector>
か<string>
でなければなりません。
strict引数の意味はbase32-decode
と同じです。
(base32-decode-string-to <string> "JBQXKJ3PNRUSA3LBNNQWQ2LLNEQGQ33VEE======") ⇒ "Hau'oli makahiki hou!"
Base16は入力オクテットの単純な16進数エンコーディングです。
RFC4648では10から15の数字に大文字のA-F
を当てていますが、
16進数エンコーディングに小文字を使う場合も良くあるので、
このライブラリではそのオプションも用意しています。
{rfc.base64
}
現在の入力ポートからデータを読み込み、Base16エンコードした結果を
現在の出力ポートに書き出します。
デフォルトでは、RFC4648の規定により、10から15に大文字のA-F
を使います。
lowercase引数が与えられて真ならば、小文字のa-f
を使います。
Base16エンコーディングではパディング文字は出力されません。
{rfc.base64
}
文字列もしくはu8vectorのmessageをBase16エンコードして、
結果を文字列として返します。lowercase引数はbase16-encode
と同じです。
(base16-encode-message "Aloha") ⇒ "416C6F6861" (base16-encode-message "Aloha" :lowercase #t) ⇒ "416c6f6861"
{rfc.base64
}
Base16エンコードされた文字列を現在の入力ポートから読み、
デコード結果を現在の出力ポートに書き出します。
デフォルトでは、Base16アルファベット以外の文字は無視され、
また大文字も小文字も認識されます。
strict引数が与えられて真ならば、
#[0-9A-F]
以外の文字が見つかるとエラーが投げられます。
{rfc.base64
}
Base16エンコードされた文字列stringをデコードして、
結果をクラスtargetのインスタンスで返します。
targetは<u8vector>
か<string>
でなければなりません。
strict引数はbase16-decode
と同じです。
(base16-decode-string-to <u8vector> "416c6f6861") ⇒ #u8(65 108 111 104 97) (base16-decode-string-to <string> "416c6f6861") ⇒ "Aloha"
以下のAPIは非推奨となりました。新規コードでは使わないでください。
{rfc.base64
}
Deprecated.
string/u8vector の内容を Base64 でエンコードされたフォーマットに変換します。
base64-encode-string
の入力となる文字列は、
完全文字列でも不完全文字列でも良いです。常にバイト・シーケンスとして扱われます。
digitsとurl-safe引数はbase64-encode
と同じです。
{rfc.base64
}
Deprecated.
Base64 でエンコードされた文字列 string をデコードしてそれぞれ文字列
あるいはu8vectorとして返します。
変換は string の終わりか、終端文字 (=
) で終了します。
Base64 でエンコードされた文字として適当でない文字は、デフォルトでは黙って無視されます。 ただし、strictキーワード引数に真の値が与えられた場合は、 空白文字以外の不適切な文字が入力にあったらそこでエラーが投げられます。
digitsとurl-safe引数はbase64-encode
と同じです。