D 1.0   D 2.0
About Japanese Translation

Last update Sun Dec 19 23:27:22 2010

std.base64

Base64 形式のエンコード/デコードを行います。 実装は RFC 4648 - The Base16 に従っています。

Example:
 ubyte[] data = [0x14, 0xfb, 0x9c, 0x03, 0xd9, 0x7e];
 Base64.encode(data);        //-> "FPucA9l+"
 Base64.decode("FPucA9l+");  //-> [0x14, 0xfb, 0x9c, 0x03, 0xd9, 0x7e]
Encoder / Decoder によってレンジインターフェイスに対応します。

Example:
 // CRLF改行で、一行76文字のMIME Base64
 foreach (encoded; Base64.encoder(f.byChunk(57))) {
     mime64.put(encoded);
     mime64.put("\r\n");
 }

Source:
std/base64.d

License:
Boost License 1.0.

Authors:
Masahiro Nakagawa, Daniel Murphy (単一値のエンコーダ/デコーダ)

alias Base64;
いわゆる標準的な Base64

alias Base64URL;
"URL/ファイル名として安全な" Base64

template Base64Impl(char Map62th,char Map63th,char Padding = '=')
Base64 形式の実装のコア部分

Example:
 alias Base64Impl!('+', '/')                   Base64;    // Base64 形式(定義済み)
 alias Base64Impl!('!', '=', Base64.NoPadding) Base64Re;  // 正規表現のための非標準的なBase64

NOTE:
パディング文字が NoPadding ならば、エンコード後の文字列はパディング文字を含みません

size_t encodeLength(in size_t sourceLength);
エンコード結果の格納に必要な文字数を計算します。

Parameters:
size_t sourceLength エンコードされるデータのバイト数

Returns:
sourceLength バイトをエンコードした結果の長さ

char[] encode(R1,R2)(in R1 source, R2 buffer) if (isArray!(R1) && is(ElementType!(R1) : ubyte) && is(R2 == char[]))
char[] encode(R1,R2)(in R1 source, R2 buffer) if (!isArray!(R1) && isInputRange!(R1) && is(ElementType!(R1) : ubyte) && hasLength!(R1) && is(R2 == char[]))
sourcebuffer へエンコード

Parameters:
source エンコードしたい入力レンジ
range エンコード結果を格納するバッファ

Returns:
エンコード結果文字列を指す、バッファのスライス

size_t encode(R1,R2)(in R1 source, R2 range) if (isArray!(R1) && is(ElementType!(R1) : ubyte) && !is(R2 == char[]))
size_t encode(R1,R2)(in R1 source, R2 range) if (!isArray!(R1) && isInputRange!(R1) && is(ElementType!(R1) : ubyte) && hasLength!(R1) && !is(R2 == char[]) && isOutputRange!(R2,char))
sourcerange へエンコード

Parameters:
source エンコードしたい入力レンジ
range エンコード結果を格納する出力レンジ

Returns:
出力レンジの put を呼んだ回数

char[] encode(Range)(Range source) if (isArray!(Range) && is(ElementType!(Range) : ubyte))
char[] encode(Range)(Range source) if (!isArray!(Range) && isInputRange!(Range) && is(ElementType!(Range) : ubyte) && hasLength!(Range))
source を新しいバッファへエンコード。

encode(source, buffer) 関数へのショートカットです。

struct Encoder(Range) if (isInputRange!(Range) && (is(ElementType!(Range) : const(ubyte)[]) || is(ElementType!(Range) : const(char)[])))
データをチャンク単位でまとめてエンコードするレンジです。

struct Encoder(Range) if (isInputRange!(Range) && is(ElementType!(Range) : ubyte))
データを1文字1文字エンコードするレンジです。

Encoder!(Range) encoder(Range)(Range range) if (isInputRange!(Range))
入力レンジを、Encoder を使って走査します。

デフォルトでは、Encoder としてはチャンクを用います。

Example:
 foreach (encoded; Base64.encoder(f.byLine())) {
     ... エンコードされた行データを処理 ...
 }
これに加えて、1文字1文字エンコードを行う Encoder を選ぶこともできます。 この Encoder では、レンジベースの遅延エンコーディングが行われます。

Example:
 // The ElementType of data is not aggregation type
 foreach (encoded; Base64.encoder(data)) {
     ... エンコードされた文字を処理 ...
 }

Parameters:
range 処理したい入力レンジ

Returns:
渡した引数から構築された Encoder オブジェクト

size_t decodeLength(in size_t sourceLength);
デコード結果の格納に必要なバイト数を計算します。

Parameters:
size_t sourceLength デコードされるデータの長さ

Returns:
sourceLength 文字をデコードした結果の長さ

ubyte[] decode(R1,R2)(in R1 source, R2 buffer) if (isArray!(R1) && is(ElementType!(R1) : dchar) && is(R2 == ubyte[]) && isOutputRange!(R2,ubyte))
ubyte[] decode(R1,R2)(in R1 source, R2 buffer) if (!isArray!(R1) && isInputRange!(R1) && is(ElementType!(R1) : dchar) && hasLength!(R1) && is(R2 == ubyte[]) && isOutputRange!(R2,ubyte))
sourcebuffer へデコード

Parameters:
source デコードしたい入力レンジ
buffer デコード結果を格納するバッファ

Returns:
デコード結果文字列を指す、バッファのスライス

Throws:
source に範囲外の文字が入っていると Exception を投げます

size_t decode(R1,R2)(in R1 source, R2 range) if (isArray!(R1) && is(ElementType!(R1) : dchar) && !is(R2 == ubyte[]) && isOutputRange!(R2,ubyte))
size_t decode(R1,R2)(in R1 source, R2 range) if (!isArray!(R1) && isInputRange!(R1) && is(ElementType!(R1) : dchar) && hasLength!(R1) && !is(R2 == ubyte[]) && isOutputRange!(R2,ubyte))
sourcerange へデコード

Parameters:
source デコードしたい入力レンジ
range デコード結果を格納する出力レンジ

Returns:
出力レンジの put を呼んだ回数

Throws:
source に範囲外の文字が入っていると Exception を投げます

char[] decode(Range)(Range source) if (isArray!(Range) && is(ElementType!(Range) : dchar))
char[] decode(Range)(Range source) if (!isArray!(Range) && isInputRange!(Range) && is(ElementType!(Range) : dchar) && hasLength!(Range))
source を新しいバッファへデコード。

decode(source, buffer) 関数へのショートカットです。

struct Decoder(Range) if (isInputRange!(Range) && (is(ElementType!(Range) : const(char)[]) || is(ElementType!(Range) : const(ubyte)[])))
データをチャンク単位でまとめてデコードするレンジです。

struct Decoder(Range) if (isInputRange!(Range) && is(ElementType!(Range) : char))
データを1文字1文字デコードするレンジです。

Decoder!(Range) decoder(Range)(Range range) if (isInputRange!(Range))
入力レンジを、 Decoder を使って走査します。

デフォルトでは、 Decoder としてはチャンクを用います。

Example:
 foreach (decoded; Base64.decoder(f.byLine())) {
     ... デコードされた行データを処理 ...
 }
これに加えて、1文字1文字デコードを行う Decoder を選ぶこともできます。 この Decoder では、レンジベースの遅延デコーディングが行われます。

Example:
 auto encoded = Base64.encoder(cast(ubyte[])"0123456789");
 foreach (n; map!q{a - '0'}(Base64.decoder(encoded))) {
     ... n で何かする  ...
 }

NOTE:
ByChunk を使う場合、チャンクサイズは 4 の倍数とする必要があります。 Decoder はエンコード境界を判定できません。

Parameters:
range 処理したい入力レンジ

Returns:
渡した引数から構築された Decoder オブジェクト