std.base64
Base64 形式のエンコード/デコードを行います。
実装は
RFC 4648 - The Base16 に従っています。
Example:
ubyte[] data = [0x14, 0xfb, 0x9c, 0x03, 0xd9, 0x7e];
Base64.encode(data); Base64.decode("FPucA9l+");
Encoder / Decoder によってレンジインターフェイスに対応します。
Example:
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 (単一値のエンコーダ/デコーダ)
- いわゆる標準的な Base64
- "URL/ファイル名として安全な" Base64
template
Base64Impl(char Map62th,char Map63th,char Padding = '=')
- Base64 形式の実装のコア部分
Example:
alias Base64Impl!('+', '/') Base64; alias Base64Impl!('!', '=', Base64.NoPadding) Base64Re;
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[]))
- source を buffer へエンコード
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))
- source を range へエンコード
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:
foreach (encoded; Base64.encoder(data)) {
... エンコードされた文字を処理 ...
}
Parameters:
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))
- source を buffer へデコード
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))
- source を range へデコード
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:
Returns:
渡した引数から構築された Decoder オブジェクト
Masahiro Nakagawa 2010-.