For Gauche 0.9.15Search (procedure/syntax/module):

Next: , Previous: , Up: ライブラリモジュール - ユーティリティ   [Contents][Index]

12.42 rfc.base64 - Base64エンコーディング

Module: rfc.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引数で指定されます。 デコード結果は一般にはバイトシーケンスになるので、文字列の場合は 不完全な文字列が返ることに注意してください。

Base64

Function: base64-encode :key line-width digits url-safe omit-padding

{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))。 デフォルトではパディング文字は省略されません。

Function: base64-encode-message message :key line-width digits url-safe omit-padding

{rfc.base64} 文字列かu8vectorのmessageをBase64エンコードして、結果を文字列で返します。 キーワード引数の意味は上のbase64-encodeと同じです。

(base64-encode-message "Hau'oli makahiki hou")
 ⇒ "SGF1J29saSBtYWthaGlraSBob3U="

ポータブルなコードでは、srfi.207bytestring->base64を使うことができます (srfi.207 - 文字列表示のバイトベクタ参照)。

Function: base64-decode :key digits url-safe strict

{rfc.base64} 現在の入力ポートから文字ストリームを読み込み、それを Base64 フォーマットとして デコードし、現在の出力ポートにバイトストリームとして書き出します。 変換は EOF か、終端文字 (=) を読み込むと終了します。

Base64 でエンコードされた文字として適当でない文字は、デフォルトでは黙って無視されます。 ただし、strictキーワード引数に真の値が与えられた場合は、 空白文字以外の不適切な文字が入力にあったらそこでエラーが投げられます。

入力が必要なパディング文字を欠いていても、デフォルトでは許容されます。 strict引数が真の場合は、入力に正しい数のパディング文字がないとエラーが投げられます。

digitsurl-safeキーワード引数は62と63の異なるエンコーディングを 指定するのに使えます。詳しくは上のbase64-encodのエントリを参照してください。

Function: base64-decode-string-to target string :key line-width digits url-safe omit-padding

{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.207base64->bytestringを使うことができます (srfi.207 - 文字列表示のバイトベクタ参照)。

Base32

RFC4648は基数32のエンコーディングとして2つの全く異なるアルファベットを規定しています。 標準のBase32はA-Zを0から25に、2-7を26から31に使います。 “base32hex” は0-9を0から9に、A-Vを10から31に使います。 RFCでは後者をbase32と呼ばないように言っているので、 二つのエンコーディングに対応する別々の手続きを用意しました。

Function: base32-encode :key omit-padding line-width
Function: base32hex-encode :key omit-padding line-width

{rfc.base64} これらの手続きは現在の入力ポートからデータを読み、 Base32またはBase32hexでエンコードされた結果を現在の出力ポートに書き出します。

キーワード引数omit-paddingline-widthbase64-encodeと同じです。

Function: base32-encode-message message :key omit-padding line-width
Function: base32hex-encode-message message :key omit-padding line-width

{rfc.base64} 文字列もしくはu8vectorのmessageをBase32/Base32hexでエンコードして、 結果を文字列として返します。

キーワード引数omit-paddingline-widthbase64-encodeと同じです。

(base32-encode-message "Hau'oli makahiki hou!")
 ⇒ "JBQXKJ3PNRUSA3LBNNQWQ2LLNEQGQ33VEE======"
(base32hex-encode-message "Hau'oli makahiki hou!")
 ⇒ "91GNA9RFDHKI0RB1DDGMGQBBD4G6GRRL44======"
Function: base32-decode :key strict
Function: base32hex-decode :key strict

{rfc.base64} Base32/Base32hexエンコードされた文字列を現在の入力ポートから読み、 デコード結果を現在の出力ポートに書き出します。

strict引数に真の値が与えられると、 入力に空白文字でもエンコードに使われる文字でもない文字が現れたり、 必要なパディング文字が無かったりした場合にエラーが投げられます。 strictのデフォルト値は#fで、不正な文字は単に無視されます。

Function: base32-decode-string-to target string :key strict
Function: base32hex-decode-string-to target string :key strict

{rfc.base64} Base32/Base32hexエンコードされた文字列stringをデコードして、 結果をtargetクラスのインスタンスとして返します。 targetはクラスオブジェクト<u8vector><string> でなければなりません。

strict引数の意味はbase32-decodeと同じです。

(base32-decode-string-to <string>
   "JBQXKJ3PNRUSA3LBNNQWQ2LLNEQGQ33VEE======")
 ⇒ "Hau'oli makahiki hou!"

Base16

Base16は入力オクテットの単純な16進数エンコーディングです。 RFC4648では10から15の数字に大文字のA-Fを当てていますが、 16進数エンコーディングに小文字を使う場合も良くあるので、 このライブラリではそのオプションも用意しています。

Function: base16-encode :key lowercase

{rfc.base64} 現在の入力ポートからデータを読み込み、Base16エンコードした結果を 現在の出力ポートに書き出します。

デフォルトでは、RFC4648の規定により、10から15に大文字のA-Fを使います。 lowercase引数が与えられて真ならば、小文字のa-fを使います。

Base16エンコーディングではパディング文字は出力されません。

Function: base16-encode-message message :key lowercase

{rfc.base64} 文字列もしくはu8vectorのmessageをBase16エンコードして、 結果を文字列として返します。lowercase引数はbase16-encodeと同じです。

(base16-encode-message "Aloha")
 ⇒ "416C6F6861"
(base16-encode-message "Aloha" :lowercase #t)
 ⇒ "416c6f6861"
Function: base16-decode :key strict

{rfc.base64} Base16エンコードされた文字列を現在の入力ポートから読み、 デコード結果を現在の出力ポートに書き出します。

デフォルトでは、Base16アルファベット以外の文字は無視され、 また大文字も小文字も認識されます。 strict引数が与えられて真ならば、 #[0-9A-F]以外の文字が見つかるとエラーが投げられます。

Function: base16-decode-string-to target string :key strict

{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

以下のAPIは非推奨となりました。新規コードでは使わないでください。

Function: base64-encode-string string :key line-width digits url-safe
Function: base64-encode-bytevector u8vector :key line-width digits url-safe

{rfc.base64} Deprecated. string/u8vector の内容を Base64 でエンコードされたフォーマットに変換します。 base64-encode-stringの入力となる文字列は、 完全文字列でも不完全文字列でも良いです。常にバイト・シーケンスとして扱われます。 digitsurl-safe引数はbase64-encodeと同じです。

Function: base64-decode-string string :key url-safe strict
Function: base64-decode-bytevector u8vector :key url-safe strict

{rfc.base64} Deprecated. Base64 でエンコードされた文字列 string をデコードしてそれぞれ文字列 あるいはu8vectorとして返します。 変換は string の終わりか、終端文字 (=) で終了します。

Base64 でエンコードされた文字として適当でない文字は、デフォルトでは黙って無視されます。 ただし、strictキーワード引数に真の値が与えられた場合は、 空白文字以外の不適切な文字が入力にあったらそこでエラーが投げられます。

digitsurl-safe引数はbase64-encodeと同じです。


Next: , Previous: , Up: ライブラリモジュール - ユーティリティ   [Contents][Index]


For Gauche 0.9.15Search (procedure/syntax/module):