質問
「はい」または「いいえ」の簡単な質問です。90%が「いいえ」であると確信していますが、よくわかりません。
Base64文字列にタブを含めることはできますか?
解決
それはあなたが何を求めているかによります。タブをbase-64でエンコードできるかどうかを尋ねる場合、答えは「はい」です。他のASCII文字と同じように扱うことができるためです。
ただし、base-64出力にタブを含めることができるかどうかを尋ねる場合、答えは「いいえ」です。次のリンクは、base-64の詳細についての記事で、どの文字が有効と見なされるかを示しています。
他のヒント
短い答えはノーです-しかし、Base64はキャリッジリターンを含むこともできません。
そのため、Base64の複数の行がある場合、キャリッジリターン、ラインフィード、およびBase64アルファベット以外のすべてを削除します
タブが含まれます。
PEMの現在のバージョン(指定 RFC 1421で)64文字を使用 大文字と 小文字のローマ字 (A〜Z、a〜z)、数字(0〜9)、および " +"および" /"シンボル。 " =" シンボルは特別なものとしても使用されます 接尾辞コード。オリジナル 仕様、RFC 989、さらに " *"を使用しましたエンコードを区切る記号 ただし、出力内の暗号化されていないデータ ストリーム。
ご覧のとおり、タブ文字は含まれていません。ただし、もちろんタブ文字をbase64文字列にエンコードできます。
もちろん。タブはASCII文字9であり、他の整数と同様にbase64表現を持ちます。
ハハ、回答からわかるように、これは実際にはそれほど単純なyes no answerではありません。
変換後の結果のBase64文字列にはタブ文字を含めることはできませんが、それを求めているのではなく、Base64のタブを含む文字列(変換前)を表すように求めているようです。その答えはイエスです。
実際に行うべきことは、文字列のエンコードを保存するように注意することです。つまり、正しいエンコード(Unicode、UTF-8など)でバイト配列に変換してから変換することです。そのバイトの配列をbase64に。
編集:簡単なテスト。
private void button2_Click(object sender, EventArgs e)
{
StringBuilder sb = new StringBuilder();
string test = "The rain in spain falls \t mainly on the plain";
sb.AppendLine(test);
UTF8Encoding enc = new UTF8Encoding();
byte[] b = enc.GetBytes(test);
string cvtd = Convert.ToBase64String(b);
sb.AppendLine(cvtd);
byte[] c = Convert.FromBase64String(cvtd);
string backAgain = enc.GetString(c);
sb.AppendLine(backAgain);
MessageBox.Show(sb.ToString());
}
Base64仕様( RFC 4648 )では、セクション3.3 では、別の仕様で明示的に許可されていない限り、アルファベット以外の文字が検出されると拒否されます。
実装は、 エンコードされたデータに含まれる場合
基本アルファベット以外の文字 base-encoded
を解釈するとき データ、仕様を除く このドキュメントを明示的に参照する それ以外の場合。そのような仕様 代わりに、MIMEが示すように、 ベース外のキャラクター エンコーディングのアルファベットは単に データの解釈時には無視されます(" あなたが受け入れるものに寛大です")。 これは、 隣接するキャリッジリターン/ラインフィード (CRLF)文字は 「アルファベット以外の文字」そして 無視されます。
PEM( RFC 1421 )やMIME( RFC 2045 )は、Base64文字列を空白で分割できることを指定します。参照されている RFC 822 ごとに、タブ(HTAB)は空白文字と見なされます。
したがって、Base64がMIMEまたはPEM(およびおそらく他の同様の仕様)のコンテキストで使用される場合、エンコードされたコンテンツのデコード中にタブを含む空白を処理(削除)する必要があります。
Convert.FromBase64String()
はそれらを気にしていないようです。文字列内のすべての空白は無視されると思います。
string xxx = "ABCD\tDEFG"; //simulated Base64 encoded string w/added tab
Console.WriteLine(xxx);
byte[] xx = Convert.FromBase64String(xxx); // convert string back to binary
Console.WriteLine(BitConverter.ToString(xx));
出力:
ABCD DEFG
00-10-83-0C-41-46
RFC-2045 (6:8)
の関連条項エンコードされた出力ストリームは これ以上の行で表される それぞれ76文字以上。 すべての行 改行またはその他の文字は 表1で見つかったものは無視する必要があります デコードソフトウェア。 base64データでは、 表以外の文字 1、改行、その他の白 スペースはおそらく送信を示します エラー、警告について メッセージまたはメッセージ拒否 いくつかの下で適切かもしれません 状況。
はい!
Base64は、8ビット値(10進数の0〜255)を安全な文字セットを使用して文字列にエンコードするために使用されます。 TABは10進数の9です。
Base 64は、次の文字セットのいずれかを使用します。
Data: ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/
URLs: ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_
テキストのバイナリ添付ファイル(例:メール)もこのシステムを使用してエンコードされます。
ここには多くの混乱があるようです。驚くべきことに、ほとんどの答えは「いいえ」です。多様性。私はそれが良い正解だとは思わない。 混乱の理由は、おそらくBase64が厳密に指定されていないという事実です。複数の実用的な実装と解釈が存在します。 詳細については、リンクテキストをご覧ください。
ただし、一般に、準拠するbase64コーデックは、いくつかのbase64定義(76文字セグメント、次にラインフィードなど)によって強制されるため、ラインフィードを理解する必要があります。 このため、ほとんどのデコーダーはインデントの空白も許可します。非常に一般的には、4文字の「トリプレット」と(3バイトをエンコードするため、その名前が付けられています。)
したがって、実際にはタブやその他の空白を使用できる可能性が十分にあります。
ただし、サービスに送信されるbase64コンテンツを生成する場合、自分でタブを追加することはありません。送信する内容は控えめに、受信する内容は(より)寛大にしてください。