英語版
このページの英語版を見る
std.base64
Base64エンコードとデコードをサポートする。
このモジュールはBase64エンコーディングの2つのデフォルト実装を提供する、
Base64標準的なエンコーディング・アルファベットと
Base64URLを提供する。
URLやファイル名に埋め込んでも安全なように設計されている。
どちらのバージョンも、テンプレート
Base64Impl.ほとんどのユーザーはこのテンプレートを直接使う必要はないだろう。
しかし、カスタマイズされたBase64エンコーディングを作成するために使うことができる、
パディング文字を省略したものや、正規表現に埋め込んでも安全なものなどだ。
を正規表現の中に埋め込んでも安全なものなど、カスタマイズされたBase64エンコーディングを作成するために使うことができる。
例:
ubyte[] data = [0x14, 0xfb, 0x9c, 0x03, 0xd9, 0x7e]; const(char)[] encoded = Base64.encode(data); assert(encoded == "FPucA9l+"); ubyte[] decoded = Base64.decode("FPucA9l+"); assert(decoded == [0x14, 0xfb, 0x9c, 0x03, 0xd9, 0x7e]);レンジAPIはエンコードとデコードの両方でサポートされている:
例:
// 76行目に従って、CRLFでMIME Base64を作成する。 File f = File("./text.txt", "r"); scope(exit) f.close(); Appender!string mime64 = appender!string; foreach (encoded; Base64.encoder(f.byChunk(57))) { mime64.put(encoded); mime64.put("\r\n"); } writeln(mime64.data);
License:
Authors:
Masahiro Nakagawa, Daniel Murphy (Single value Encoder and Decoder)
出典 std/base64.d
- alias
Base64
= Base64Impl!('+', '/', '='); - 標準Base64エンコーディングの実装。利用可能なメソッドについては Base64Implを参照のこと。Examples:
ubyte[] data = [0x83, 0xd7, 0x30, 0x7a, 0x01, 0x3f]; writeln(Base64.encode(data)); // "g9cwegE/" writeln(Base64.decode("g9cwegE/")); // data
- alias
Base64URL
= Base64Impl!('-', '_', '='); - URLやファイル名に使用しても安全なBase64エンコーディングのバリエーション。利用可能なメソッドについては Base64Implを参照のこと。Examples:
ubyte[] data = [0x83, 0xd7, 0x30, 0x7a, 0x01, 0x3f]; writeln(Base64URL.encode(data)); // "g9cwegE_" writeln(Base64URL.decode("g9cwegE_")); // data
- alias
Base64URLNoPadding
= Base64Impl!('-', '_', '\0'); - URLやファイル名で使用しても安全なBase64エンコーディングの@unpaddedのバリエーション。 RFC4648と7515(JWS/JWT/JWE)で使用されている。利用可能な方法については Base64Implを参照のこと。Examples:
ubyte[] data = [0x83, 0xd7, 0x30, 0x7b, 0xef]; writeln(Base64URLNoPadding.encode(data)); // "g9cwe-8" writeln(Base64URLNoPadding.decode("g9cwe-8")); // data
- template
Base64Impl
(char Map62th, char Map63th, char Padding = '=') - Base64エンコードとデコードを実装するためのテンプレート。ほとんどの場合、このテンプレートを直接使う必要はない、 このモジュールはデフォルトの実装を提供する: Base64代わりに、このモジュールはデフォルトの実装を提供する を実装する Base64URLそして Base64URLNoPadding, で、それぞれURLとファイル名で使用するBase64バリアントを実装する を実装する カスタマイズされたBase64エンコーディングスキームは、この テンプレートをインスタンス化することで実装できる。例:
// 正規表現に埋め込むための非標準Base64フォーマット。 alias Base64Re = Base64Impl!('!', '=', Base64.NoPadding);
注意 Padding パラメーターが に設定されている場合、エンコードされた文字列はパディングを持たない。 NoPadding に設定されている場合、エンコードされた文字列はパディングを持たない。
Examples:import std.string : representation; // 定義済み: alias Base64 = Base64Impl!('+', '/'); ubyte[] emptyArr; writeln(Base64.encode(emptyArr)); // "" writeln(Base64.encode("f".representation)); // "Zg==" writeln(Base64.encode("foo".representation)); // "Zm9v" alias Base64Re = Base64Impl!('!', '=', Base64.NoPadding); writeln(Base64Re.encode("f".representation)); // "Zg" writeln(Base64Re.encode("foo".representation)); // "Zm9v"
- enum auto
NoPadding
; - パディングなしのエンコードを表す
- pure nothrow @nogc @safe size_t
encodeLength
(in size_tsourceLength
); - 与えられた長さの入力に対応するエンコードされた文字列を格納するのに必要な長さを計算する。 を格納するのに必要な長さを計算する。Parameters:
size_t sourceLength
入力配列の長さ。 Returns:指定した長さの配列を Base64 エンコードしたときの長さ。Examples:ubyte[] data = [0x1a, 0x2b, 0x3c, 0x4d, 0x5d, 0x6e]; // エンコードされた文字列を保持するのに十分な大きさのバッファを確保する。 auto buf = new char[Base64.encodeLength(data.length)]; Base64.encode(data, buf); writeln(buf); // "Gis8TV1u"
- pure @trusted char[]
encode
(R1, R2)(scope const R1source
, return scope R2buffer
)
if (isArray!R1 && is(ElementType!R1 : ubyte) && is(R2 == char[]));
char[]encode
(R1, R2)(R1source
, R2buffer
)
if (!isArray!R1 && isInputRange!R1 && is(ElementType!R1 : ubyte) && hasLength!R1 && is(R2 == char[])); - Base64エンコードを使ってソースを char[] バッファにエンコードする。 エンコードする。Parameters:
R1 source
入力範囲 をエンコードする。 R2 buffer
エンコードされた結果を格納するchar[] バッファ。 Returns:エンコードされた文字列を含むバッファのスライス。Examples:ubyte[6] data = [0x83, 0xd7, 0x30, 0x7a, 0x01, 0x3f]; char[32] buffer; // 必要以上に大きい // 念のために言っておくが... auto encodedLength = Base64.encodeLength(data.length); assert(buffer.length >= encodedLength); // encode()は、与えられたバッファへのスライスを返す。 auto encoded = Base64.encode(data[], buffer[]); assert(encoded is buffer[0 .. encodedLength]); writeln(encoded); // "g9cwegE/"
- size_t
encode
(E, R)(scope const(E)[]source
, auto ref Rrange
)
if (is(E : ubyte) && isOutputRange!(R, char) && !is(R == char[]));
size_tencode
(R1, R2)(R1source
, auto ref R2range
)
if (!isArray!R1 && isInputRange!R1 && is(ElementType!R1 : ubyte) && hasLength!R1 && !is(R2 == char[]) && isOutputRange!(R2, char)); - ソースをエンコードする。 ソースを エンコードする。Returns:出力範囲のput メソッドが呼び出された回数。Examples:
import std.array : appender; auto output = appender!string(); ubyte[] data = [0x1a, 0x2b, 0x3c, 0x4d, 0x5d, 0x6e]; // このencode()のオーバーロードは、 // 出力範囲のputメソッドの呼び出し回数を返す。 writeln(Base64.encode(data, output)); // 8 writeln(output.data); // "Gis8TV1u"
- pure @safe char[]
encode
(Range)(Rangesource
)
if (isArray!Range && is(ElementType!Range : ubyte));
char[]encode
(Range)(Rangesource
)
if (!isArray!Range && isInputRange!Range && is(ElementType!Range : ubyte) && hasLength!Range); - ソースを新しく割り当てられたバッファにエンコードする。この便利な方法は、出力バッファを手動で管理する必要性を軽減する。 バッファを手動で管理する必要がなくなる。Parameters:
Range source
入力範囲 をエンコードする。 Returns:エンコードされた文字列を含む、新しく割り当てられたchar[] バッファ。Examples:ubyte[] data = [0x1a, 0x2b, 0x3c, 0x4d, 0x5d, 0x6e]; writeln(Base64.encode(data)); // "Gis8TV1u"
- struct
Encoder
(Range) if (isInputRange!Range && (is(ElementType!Range : const(ubyte)[]) || is(ElementType!Range : const(char)[]))); - 入力範囲 は、データ項目の範囲のそれぞれのBase64エンコーディングを反復する。この範囲は になる。
注釈: この構造体は、ユーザーコードで直接作成することを意図していない。 この構造体は、ユーザー・コードで直接作成することを意図していない; 代わりに encoder代わりに関数を使用すること。
- @property @trusted bool
empty
(); - Returns:エンコードされたデータが残っていない場合はtrueを返す。
- nothrow @property @safe char[]
front
(); - Returns:エンコードされたデータの現在のチャンク。
- void
popFront
(); - エンコードされたデータの次のチャンクまで範囲を進める。Throws:
- @property typeof(this)
save
(); - 範囲の現在の繰り返し状態を保存する。このメソッドは、基礎となる範囲が である場合にのみ利用できる。Returns:this のコピーである。
- struct
Encoder
(Range) if (isInputRange!Range && is(ElementType!Range : ubyte)); - 入力範囲。 与えられたソース・データのエンコードされたバイトを反復する入力範囲。入力範囲は になる。
注釈: この構造体は、ユーザーコードで直接作成することは意図されていない。 この構造体は、ユーザーコードで直接作成することを意図していない; 代わりに encoder代わりに関数を使用すること。
- const nothrow @property @safe bool
empty
(); - Returns:イテレートすべきエンコードされた文字がなくなった場合はtrueを返す。
- nothrow @property @safe ubyte
front
(); - Returns:現在エンコードされている文字。
- void
popFront
(); - 次のエンコード文字に進む。Throws:
- @property typeof(this)
save
(); - 範囲の現在の反復状態を保存する。このメソッドは、基礎となる範囲が である場合にのみ使用できる。Returns:this のコピーである。
- Encoder!Range
encoder
(Range)(Rangerange
)
if (isInputRange!Range); - 与えられた入力範囲のBase64エンコーディングを反復処理するEncoder を構築する。 のBase64エンコーディングを反復処理する を構築する。Parameters:
Range range
入力範囲 エンコードされるデータの Returns:rangeがバイト範囲である場合は、対応するBase64エンコーディングのバイトを繰り返し処理するEncoder 。 をイテレートする。 rangeがバイト範囲の範囲である場合、Encoder 。 範囲の各要素のBase64エンコード文字列を反復処理する。 どちらの場合も、返されるEncoder 。 前方範囲である。 与えられたrange
が少なくとも前方範囲であれば前方範囲となる。 になる。例: この例では、入力を1行ずつエンコードする。
File f = File("text.txt", "r"); scope(exit) f.close(); uint line = 0; foreach (encoded; Base64.encoder(f.byLine())) { writeln(++line, ". ", encoded); }
例: この例では、入力データを1バイトずつエンコードする。
ubyte[] data = cast(ubyte[]) "0123456789"; // データのElementTypeが集約型ではない foreach (encoded; Base64.encoder(data)) { writeln(encoded); }
- pure nothrow @nogc @safe size_t
decodeLength
(in size_tsourceLength
); - Base64エンコードされた文字列が与えられると、デコードされた文字列の長さを計算する。 文字列の長さを計算する。Parameters:
size_t sourceLength
Base64エンコーディングの長さ。 Returns:のBase64エンコーディングに対応する、デコードされた文字列の長さ。 長さsourceLength に対応するデコード文字列の長さ。Examples:auto encoded = "Gis8TV1u"; // デコードされた結果を保持するのに十分な大きさのバッファを確保する。 auto buffer = new ubyte[Base64.decodeLength(encoded.length)]; Base64.decode(encoded, buffer); writeln(buffer); // [0x1a, 0x2b, 0x3c, 0x4d, 0x5d, 0x6e]
- pure @trusted ubyte[]
decode
(R1, R2)(in R1source
, return scope R2buffer
)
if (isArray!R1 && is(ElementType!R1 : dchar) && is(R2 == ubyte[]) && isOutputRange!(R2, ubyte));
ubyte[]decode
(R1, R2)(R1source
, R2buffer
)
if (!isArray!R1 && isInputRange!R1 && is(ElementType!R1 : dchar) && hasLength!R1 && is(R2 == ubyte[]) && isOutputRange!(R2, ubyte)); - ソースを与えられたバッファにデコードする。Parameters:
R1 source
入力範囲 をデコードする。 R2 buffer
デコード結果を格納するバッファ。 Returns:デコード結果を格納するバッファのスライス。Throws:Base64Exception ソースに 現在のBase64エンコーディングスキームの基本アルファベット以外の文字がソースに含まれている。Examples:auto encoded = "Gis8TV1u"; ubyte[32] buffer; // 必要以上に大きい // 念のために言っておくが... auto decodedLength = Base64.decodeLength(encoded.length); assert(buffer.length >= decodedLength); // decode()は与えられたバッファのスライスを返す。 auto decoded = Base64.decode(encoded, buffer[]); assert(decoded is buffer[0 .. decodedLength]); writeln(decoded); // [0x1a, 0x2b, 0x3c, 0x4d, 0x5d, 0x6e]
- size_t
decode
(R1, R2)(in R1source
, auto ref R2range
)
if (isArray!R1 && is(ElementType!R1 : dchar) && !is(R2 == ubyte[]) && isOutputRange!(R2, ubyte));
size_tdecode
(R1, R2)(R1source
, auto ref R2range
)
if (!isArray!R1 && isInputRange!R1 && is(ElementType!R1 : dchar) && hasLength!R1 && !is(R2 == ubyte[]) && isOutputRange!(R2, ubyte)); - ソースを所定の出力範囲にデコードする。 出力範囲にデコードする。Returns:出力範囲のput メソッドが呼び出された回数。Throws:Base64Exception ソースに 現在のBase64エンコーディングスキームの基本アルファベット以外の文字がソースに含まれている。Examples:
struct OutputRange { ubyte[] result; void put(ubyte b) { result ~= b; } } OutputRange output; // このdecode()のオーバーロードは、put()の呼び出し回数を返す。 writeln(Base64.decode("Gis8TV1u", output)); // 6 writeln(output.result); // [0x1a, 0x2b, 0x3c, 0x4d, 0x5d, 0x6e]
- pure @safe ubyte[]
decode
(Range)(Rangesource
)
if (isArray!Range && is(ElementType!Range : dchar));
ubyte[]decode
(Range)(Rangesource
)
if (!isArray!Range && isInputRange!Range && is(ElementType!Range : dchar) && hasLength!Range); - ソースを新しく割り当てられたバッファにデコードする。この便利な方法により、デコード・バッファを手動で管理する必要がなくなる。 バッファを手動で管理する必要がなくなる。Parameters:
Range source
入力範囲 をデコードする。 Returns:デコードされた文字列を含む、新しく割り当てられたubyte[] バッファ。Examples:auto data = "Gis8TV1u"; writeln(Base64.decode(data)); // [0x1a, 0x2b, 0x3c, 0x4d, 0x5d, 0x6e]
- struct
Decoder
(Range) if (isInputRange!Range && (is(ElementType!Range : const(char)[]) || is(ElementType!Range : const(ubyte)[]))); - 入力範囲 は、Base64エンコーディングのデコードされたデータを反復処理する。この範囲は になる。
注釈: この構造体は、ユーザーコードで直接作成することを意図していない。 この構造体は、ユーザー・コードで直接作成することを意図していない; 代わりに decoder代わりに関数を使用すること。
- @property @trusted bool
empty
(); - Returns:イテレートする要素がなくなった場合はtrueを返す。
- nothrow @property @safe ubyte[]
front
(); - Returns:入力中の現在の要素をデコードする。
- void
popFront
(); - デコードする入力の次の要素に進む。Throws:
- @property typeof(this)
save
(); - 現在の反復処理の状態を保存する。このメソッドは、基礎となる範囲が 前方範囲Returns:this のコピーである。
- struct
Decoder
(Range) if (isInputRange!Range && is(ElementType!Range : char)); - 入力範囲。 Base64エンコードされた文字列からデコードされたデータのバイトを反復処理する。この範囲は になる。
注釈: この構造体は、ユーザーコードで直接作成することを意図していない。 この構造体は、ユーザー・コードで直接作成することを意図していない; 代わりに decoder代わりに関数を使用すること。
- const nothrow @property @safe bool
empty
(); - Returns:イテレートする要素がなくなった場合はtrueを返す。
- nothrow @property @safe ubyte
front
(); - Returns:現在デコードされているバイト。
- void
popFront
(); - 次のデコードバイトに進む。Throws:
- @property typeof(this)
save
(); - 現在の反復処理の状態を保存する。このメソッドは、基礎となる範囲が 前方範囲Returns:this のコピーである。
- Decoder!Range
decoder
(Range)(Rangerange
)
if (isInputRange!Range);
Decoder!(const(ubyte)[])decoder
()(const(char)[]range
); - 与えられたBase64エンコードされたデータのデコードを繰り返すDecoder 。 を構築する。Parameters:
Range range
入力範囲 またはchar 配列。を受け付けない。 wchar[] dchar[] も受け付けない。 Returns:rangeが char の範囲または配列の場合、Decoder 。 は、対応するBase64デコードのバイトを反復する。 rangeが文字の範囲の範囲であればDecoder の各要素に対応するデコード文字列を反復処理する。 を返す。 どちらの場合も、返されるDecoder 。 前方範囲となる。 与えられたrange
が少なくとも前方範囲であれば前方範囲となる。 になる。 入力データに、現在のBase64エンコーディングスキームの基本アルファベットにない文字が含まれている場合 をスローすることがある。 Base64Exception.例: この例は、入力データ・ラインの範囲にわたるデコードを示している。
foreach (decoded; Base64.decoder(stdin.byLine())) { writeln(decoded); }
この例では1バイトずつデコードしている。auto encoded = Base64.encoder(cast(ubyte[])"0123456789"); foreach (n; map!q{a - '0'}(Base64.decoder(encoded))) { writeln(n); }
Examples:import std.algorithm.comparison : equal; string encoded = "VGhvdSBzaGFsdCBuZXZlciBjb250aW51ZSBhZnRlciBhc3NlcnRpbmcgbnVsbA=="; assert(Base64.decoder(encoded) .equal("Thou shalt never continue after asserting null"));
- class
Base64Exception
: object.Exception; - Base64エンコードまたはデコードエラーが発生したときにスローされる例外。Examples:
import std.exception : assertThrown; assertThrown!Base64Exception(Base64.decode("ab|c"));
Copyright © 1999-2024 by the D Language Foundation
DEEPL APIにより翻訳、ところどころ修正。
このページの最新版(英語)
このページの原文(英語)
翻訳時のdmdのバージョン: 2.108.0
ドキュメントのdmdのバージョン: 2.109.1
翻訳日付 :
HTML生成日時:
編集者: dokutoku