Frage

Ja oder Nein Frage, und ich bin 90% sicher, dass es nicht ... aber ich bin nicht sicher.

Kann ein Base64-String Registerkarten enthalten?

War es hilfreich?

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:

http://en.wikipedia.org/wiki/Base64

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.

wikipedia.com:

  

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

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top