Kann ein Base64 String enthalten Registerkarten?
Frage
Ja oder Nein Frage, und ich bin 90% sicher, dass es nicht ... aber ich bin nicht sicher.
Kann ein Base64-String Registerkarten enthalten?
Lösung
Es hängt davon ab, was Sie fragen. Wenn Sie fragen, ob oder ob nicht Registerkarten Base64-kodiert werden kann, dann ist die Antwort „ja“, da sie das gleiche wie jeder andere ASCII-Zeichen behandelt werden kann.
Wenn Sie jedoch, ob oder nicht fragen Base64-Ausgabe Registerkarten enthalten kann, dann ist die Antwort nein. Der folgende Link ist für einen Artikel Detaillierung Basis-64, einschließlich, welche Zeichen als gültig betrachtet:
Andere Tipps
Die kurze Antwort ist nein - aber Base64 kann nicht Zeilenumbrüche entweder enthalten.
Deshalb, wenn Sie mehrere Zeilen von Base64 haben, können Sie alle Zeilenumbrüche Streifen aus, Zeilenvorschübe, und alles, was nicht in dem Base64-Alphabet ist
Dazu gehören Registerkarten.
Die aktuelle Version von PEM (spezifiziert in RFC 1421) verwendet ein 64-Zeichen Alphabet, bestehend aus Ober- und Klein römischen Alphabets (A-Z, a-z), die Ziffern (0-9), und die „+“ und „/“ Symbole. Die „=“ Symbol wird auch als Sonder verwendet Zusatzcode. Das Original Spezifikation RFC 989, das zusätzlich das Symbol „*“ verwendet, codiert abgrenzen aber unverschlüsselten Daten innerhalb des Ausgangs Stream.
Wie Sie sehen können, Tabulatoren sind nicht enthalten. Allerdings können Sie natürlich ein Tab-Zeichen in einen Base64-String kodieren.
Klar. Tab ist nur ASCII-Zeichen 9, und das hat eine base64 Darstellung wie jede andere ganze Zahl ist.
Haha, wie man aus den Antworten zu sehen, das ist eigentlich nicht so einfach ja keine Antwort.
Eine resultierende Base64 Zeichenfolge nach der Konvertierung nicht ein Tab-Zeichen enthalten kann, aber es scheint mir, dass Sie das nicht fragen, scheint mir, dass Sie fragen, können Sie eine Zeichenfolge (vor der Konvertierung) stellen eine Registerkarte in Base64 enthält, und die Antwort ist ja.
Ich würde allerdings hinzufügen, dass wirklich das, was Sie tun sollten, ist, stellen Sie sicher, dass Sie darauf achten, die Codierung der Zeichenfolge zu erhalten, dh wandeln es in ein Byte-Array mit Ihrer korrekten Kodierung (Unicode, UTF-8 was auch immer) dann konvertieren dass Array von Bytes zu Base64.
EDIT:. Ein einfacher Test
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-Spezifikation ( RFC 4648 ) heißt es in Abschnitt 3.3 , dass alle auftretenden nicht-Alphabet Zeichen ausdrücklich abgelehnt werden sollte, es sei denn durch eine andere Spezifikation erlaubt:
Implementierungen müssen die ablehnen codierte Daten, wenn es enthält
Zeichen außerhalb des Basisalphabet bei der Interpretation Basis-encoded
Daten, es sei denn, die Spezifikation die sich auf dieses Dokument ausdrücklich nichts anderes ergibt. Solche Spezifikationen kann stattdessen angeben, wie MIME tut, dass Zeichen außerhalb des Grundes Codierung Alphabet sollte einfach sein ignoriert, wenn die Interpretation von Daten ( "sein liberal, was Sie akzeptieren "). Beachten Sie, dass dies, dass jedes Mittel benachbarter Wagenrücklauf / Zeilenvorschub (CRLF) Zeichen darstellen, „Nicht-Alphabet Zeichen“ und sind ignoriert.
Specs wie PEM ( RFC 1421 ) und MIME ( RFC 2045 ) angeben, dass Base64-Strings durch Leerzeichen aufgebrochen werden kann. Per verwiesen RFC 822 , ein Register (HTAB) ist ein Leerzeichen betrachtet.
Also, wenn Base64 in Zusammenhang mit entweder MIME oder PEM verwendet wird (und wahrscheinlich auch andere ähnliche Spezifikationen), Leerzeichen, einschließlich Registerkarten, sollten behandelt (gezupft) werden, während das Decodieren des codierten Inhalts.
Convert.FromBase64String()
in der .NET-Framework scheint sie nicht zu kümmern. Ich glaube, alle Leerzeichen in der Zeichenfolge ignoriert wird.
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));
Ausgabe:
ABCD DEFG
00-10-83-0C-41-46
Die entsprechende Klausel von RFC-2045 (6: 8)
Der codierte Ausgangsstrom muss sein in den Zeilen von nicht mehr vertreten als 76 Zeichen. Alle Linie Brüche oder andere Zeichen nicht in der Tabelle gefunden 1 muss ignoriert werden, indem Decodiersoftware. In Base64 Daten, Zeichen andere als die in der Tabelle 1, Zeilenumbrüche und andere weiß Raum zeigen wahrscheinlich eine Übertragung Fehler, über die eine Warnung Nachricht oder sogar eine Nachricht Ablehnung könnte unter einigen angemessen sein Umstände.
YES!
Base64 wird verwendet, um einen 8-Bit-Wert (dezimal 0 bis 255) in einen String mit einem Satz von sicheren Zeichen zu kodieren. TAB ist dezimal 9.
Basis 64 verwendet eine der folgenden Zeichensätze:
Data: ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/
URLs: ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_
Binary Attachments. (ZB: E-Mail) in Text wird auch dieses System codiert mit
Es scheint, dass es eine Menge Verwirrung ist hier; und überraschend die meisten Antworten sind von „No“ Vielfalt. Ich glaube nicht, dass eine gute kanonische Antwort. Der Grund für die Verwirrung ist wahrscheinlich die Tatsache, dass Base64 nicht zwingend vorgeschrieben ist; mehrere praktische Implementierungen und Interpretationen existieren. Sie können überprüfen Link-Text für mehr Diskussion zu diesem Thema.
Im Allgemeinen jedoch base64 Codecs konformer Zeilenvorschübe verstehen sollte, wie sie von einigen base64 Definitionen beauftragt sind (76 Zeichensegmente, dann Zeilenvorschub usw.). Aus diesem Grunde ist die meisten Decoder erlauben auch Einzug Leerzeichen, und ganz allgemein jedes Leerzeichen zwischen 4-Zeichen „Triplets“ (so genannt, da sie 3 Bytes kodieren).
So gibt es eine gute Chance, dass in der Praxis Sie Tabs und anderen weißen Raum verwenden können.
Aber ich würde mich Tabs nicht hinzufügen, wenn Erzeugung base64 Inhalt an einen Dienst gesendet -. Bei konservativ sein, was Sie senden, (mehr) liberal, was Sie erhalten